C#访问修改符
2021-04-07 12:26
标签:声明 led sid blank dllimport rtu ati tput 修改 修饰符可以指定访问的可见性,还可以指定其本质。(文章摘自《C#高级编程(第9版)》以及Microsoft) 1. 可见性修饰符 public:应用于所有类型或成员,即任何代码均可以访问该项——公有访问,不受任何限制 protected:应用于类型和内嵌类型的所有成员,即只有派生的类型能访问该项——保护访问,只限于本类和子类访问 internal:应用于所有类型或成员,即只能在包含它的程序集中访问该项——内部访问。只限于本程序集内访问 private:应用于类型和内嵌类型的所有成员,即只能在它所属的类型中访问该项——私有访问。只限于本类成员访问 protected internal:应用于类型和内嵌类型的所有成员,即只能在包含它的程序集和派生类型的任何代码中访问该项——内部保护访问。只限于本程序集内和子类访问。 注:protected、private、protected internal不能用来定义类,只能应用于成员。但是可用于定义嵌套类,嵌套的内部类可以访问外部类所有成员,包括私有成员。 2. 其他修饰符 new:应用于函数成员,即成员用相同的签名隐藏继承的成员——采用new创建对象时,可调用默认的构造函数 static:应用于所有成员,即成员不作用于类的具体实例——存储在全局数据区,不占用类的空间大小。 virtual:仅应用于函数成员,即成员可以由派生类重写——该修饰符修饰的函数可以作为正常的函数使用,也可以在派生类中用override进行重写 abstract:仅应用于函数成员,即虚拟成员定义了成员的签名,但没有提供实际代码——该修饰符修饰的函数不能作为正常的函数使用,必须在派生类中用override进行重写 override:仅应用于函数成员,即成员重写了继承的虚拟或抽象成员 sealed:应用于类、方法和属性,即对于类,不能继承自密封类。对于属性和方法,成员重写已继承的虚拟成员,但任何派生类中的任何成员都不能重写该成员。该修饰符必须与override一起使用。——禁止继承 extern:仅用于静态DllImport方法,即成员在外部用另一种语言实现。——用于声明在外部实现的方法,此时方法还需声明为static;不能与abstract一起使用 例:virtual和abstract区别 C#访问修改符 标签:声明 led sid blank dllimport rtu ati tput 修改 原文地址:https://www.cnblogs.com/zhangjbravo/p/9110642.html1 public class OuterClass //不能使用protected、private、protected internal
2 {
3 protected class InnerClass //可以使用protected、private、protected internal,可以访问OuterClass所有成员,其为OuterClass成员之一
4 {
5 // etc.
6 }
7 // etc.
8 }
1 class MyBaseClass
2 {
3 // virtual auto-implemented property. Overrides can only
4 // provide specialized behavior if they implement get and set accessors.
5 public virtual string Name { get; set; }
6
7 // ordinary virtual property with backing field
8 private int num;
9 public virtual int Number
10 {
11 get { return num; }
12 set { num = value; }
13 }
14 }
15
16
17 class MyDerivedClass : MyBaseClass
18 {
19 private string name;
20
21 // Override auto-implemented property with ordinary property
22 // to provide specialized accessor behavior.
23 public override string Name
24 {
25 get
26 {
27 return name;
28 }
29 set
30 {
31 if (value != String.Empty)
32 {
33 name = value;
34 }
35 else
36 {
37 name = "Unknown";
38 }
39 }
40 }
41
42 }
1 abstract class ShapesClass
2 {
3 abstract public int Area();
4 }
5 class Square : ShapesClass
6 {
7 int side = 0;
8
9 public Square(int n)
10 {
11 side = n;
12 }
13 // Area method is required to avoid
14 // a compile-time error.
15 public override int Area()
16 {
17 return side * side;
18 }
19
20 static void Main()
21 {
22 Square sq = new Square(12);
23 Console.WriteLine("Area of the square = {0}", sq.Area());
24 }
25
26 interface I
27 {
28 void M();
29 }
30 abstract class C : I
31 {
32 public abstract void M();
33 }
34
35 }
36 // Output: Area of the square = 144