C#语法

面向对象的三大特性:封装,继承,多态

封装

把类的「数据」和「操作数据的方法」包在一起,同时把不想让外部随便改的东西藏起来,只留安全的入口给外面用。

public class Person
{
    // 1. 私有字段:藏起来!外部不能直接访问
    private int _age;

    // 2. 公开属性:只留安全入口,外部只能通过这里读写
    public int Age
    {
        get { return _age; }   // 读取
        set 
        { 
            // 3. 加验证!保证数据永远合法
            if (value >= 0 && value <= 150)
                _age = value;
            else
                Console.WriteLine("年龄必须在0-150之间");
        }
    }
}

// 调用代码
Person p = new Person();
p.Age = 20;  // 正常
p.Age = -5;  // 自动拦截,输出错误提示,数据安全

隐藏:用 private 关键字把变量 / 方法设为私有,外部看不见、改不了
暴露:用 public 关键字把安全的方法、属性开放给外部使用

继承

继承就是:一个类直接 “抄” 另一个类的所有属性和方法,不用重复写代码,还能自己再加新功能。
eg: 爸爸有:姓名、年龄、吃饭、睡觉
儿子继承爸爸,自动拥有姓名、年龄、吃饭、睡觉
儿子还能自己多一个新技能:打游戏

// 父类(基类)
public class Animal
{
    public string Name { get; set; }

    public void Eat()
    {
        Console.WriteLine("动物会吃东西");
    }
}
// 子类(派生类) 继承 Animal
public class Dog : Animal
{
    // 自己新增的方法
    public void Bark()
    {
        Console.WriteLine("狗狗汪汪叫");
    }
}
Dog dog = new Dog();
dog.Name = "小黄";
dog.Eat();   // 直接用父类的方法,不用自己写
dog.Bark();  // 自己独有的方法

多态

多态必须先有继承才能用
同一个方法,父类引用指向子类对象,调用的时候执行的是「子类自己重写的逻辑」,同一个行为,不同子类有不同实现。
父类:动物,都有「叫」这个行为
子类:狗、猫、鸭
同样都是「叫」:
狗 → 汪汪
猫 → 喵喵
鸭 → 嘎嘎
同一个动作,不同对象表现不一样,这就是多态。

多态核心条件(缺一不可)
1.必须有继承
2.父类方法用 virtual 标记(允许被重写)
3.子类用 override 重写父类方法
4.父类变量指向子类对象

// 父类
public class Animal
{
    // virtual:允许子类重写
    public virtual void Shout()
    {
        Console.WriteLine("动物发出叫声");
    }
}
// 狗 继承 动物
public class Dog : Animal
{
    // override:重写父类方法
    public override void Shout()
    {
        Console.WriteLine("狗狗:汪汪汪");
    }
}

// 猫 继承 动物
public class Cat : Animal
{
    public override void Shout()
    {
        Console.WriteLine("猫咪:喵喵喵");
    }
}
// 父类类型 变量 = new 子类()
Animal a1 = new Dog();
Animal a2 = new Cat();

// 调用同一个 Shout(),执行的是子类自己的方法
a1.Shout();  // 输出:狗狗:汪汪汪
a2.Shout();  // 输出:猫咪:喵喵喵

更多推荐