C# protected修饰符的用法(附带实例)
在 C# 中,protected 是介于 public 和 private 之间的访问权限,当一个类的属性或方法声明为 protected 存取修饰符时,在这个访问权限下,这个类、衍生类(相同项目或不同项目)都可以使用或继承此类的属性或方法。
【实例 1】将 Animal 的 name 属性声明为 protected,这时程序第 30 行就可以继承父类的成员变量 name 了。
当将父类的属性声明为 protected 访问控制时,其实也可以在子类的构造方法内直接设定父类的 protected 属性内容。
【实例 2】这个程序主要是省略父类的构造方法,然后在子类的构造方法内设定父类的属性,详情可参考第 23 行。
base 关键词可以调用父类的构造方法,也可以用 base 调用父类的字段、属性与方法,如下所示:
重新设计实例 2,第 23 行用 base.name 替换 this.name:
【实例 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 相同。