首页 > 编程笔记 > C#笔记 阅读:12

C# protected修饰符的用法(附带实例)

C# 中,protected 是介于 public 和 private 之间的访问权限,当一个类的属性或方法声明为 protected 存取修饰符时,在这个访问权限下,这个类、衍生类(相同项目或不同项目)都可以使用或继承此类的属性或方法。

【实例 1】将 Animal 的 name 属性声明为 protected,这时程序第 30 行就可以继承父类的成员变量 name 了。
Dog dog = new Dog("Haly");
dog.Eat();
dog.Sleep();
dog.Barking();

public class Animal
{
    protected string name; // 声明 protected
    public Animal(string name)
    {
        this.name = name;
    }
    public void Eat()
    {
        Console.WriteLine($"{name} 正在吃食物");
    }
    public void Sleep()
    {
        Console.WriteLine($"{name} 正在睡觉");
    }
}

public class Dog : Animal
{
    public Dog(string name) : base(name)
    {
    }
    public void Barking()
    {
        Console.WriteLine($"{name} 正在叫");
    }
}
执行结果为:

Haly 正在吃食物
Haly 正在睡觉
Haly 正在叫


当将父类的属性声明为 protected 访问控制时,其实也可以在子类的构造方法内直接设定父类的 protected 属性内容。

【实例 2】这个程序主要是省略父类的构造方法,然后在子类的构造方法内设定父类的属性,详情可参考第 23 行。
Dog dog = new Dog("Haly");
dog.Eat();
dog.Sleep();
dog.Barking();

public class Animal
{
    protected string name;
    public void Eat()
    {
        Console.WriteLine($"{name} 正在吃食物");
    }
    public void Sleep()
    {
        Console.WriteLine($"{name} 正在睡觉");
    }
}

public class Dog : Animal
{
    public Dog(string name)
    {
        this.name = name; // 使用父类的protected name字段
    }
    public void Barking()
    {
        Console.WriteLine($"{name} 正在叫");
    }
}
执行结果为:

Haly 正在吃食物
Haly 正在睡觉
Haly 正在叫


base 关键词可以调用父类的构造方法,也可以用 base 调用父类的字段、属性与方法,如下所示:
base.字段;
base.属性;
base.方法;

重新设计实例 2,第 23 行用 base.name 替换 this.name:
base.name = name;    // 使用父类的protected name
执行结果与实例 2 相同。

相关文章