一 常用的访问修饰符
1 C#官方文档的解释
- public:同一程序集中的任何其他代码或引用该程序集的其他程序集都可以访问该类型或成员。 某一类型的公共成员的可访问性水平由该类型本身的可访问性级别控制。
- private:只有同一
class
或struct
中的代码可以访问该类型或成员。 - protected:只有同一
class
或者从该class
派生的class
中的代码可以访问该类型或成员。 - internal:同一程序集中的任何代码都可以访问该类型或成员,但其他程序集中的代码不可以。 换句话说,
internal
类型或成员可以从属于同一编译的代码中访问。 - protected internal:该类型或成员可由对其进行声明的程序集或另一程序集中的派生
class
中的任何代码访问。 - private protected:该类型或成员可以通过从
class
派生的类型访问,这些类型在其包含程序集中进行声明。
2 图表总结
二 关键字this和base
1 this
- 代表本类对象
- this.本类成员方法
- this.本类的属性或是字段
- 在本类使用的时候可以省略不写
- this用来区分同名的局部变量和成员变量
2 base
base
关键字用于从派生类中访问基类的成员。 如果要执行以下操作时使用它:
-
调用基类上已被其他方法重写的方法。
-
指定创建派生类实例时应调用的基类构造函数。
仅允许基类访问在构造函数、实例方法和实例属性访问器中进行。
在静态方法中使用 base
关键字将产生错误。
所访问的基类是类声明中指定的基类。 例如,如果指定 class ClassB : ClassA
,则从 ClassB 访问 ClassA 的成员,而不考虑 ClassA 的基类。
base代表父类的对象
- base.父类的成员方法
- base.父类的属性
- base的第二个作用是访问父类的构造
-
base ()访问父类的无参构造,这个可以省路不写
-
base(实参) 访问父类的有参构造,必须显示声明
3.继承中的构造函数
父类的构造函数不是用来让子类继承的,而是用来让子类访问的,每个子类对象在创建的时候都会访问父类的构造函数
如何访问父类的构造函数?
使用base关键字:base(实参) 访问父类的有参构造,必须显示声明
三 重载和重写的区别
1 重载:
重载(Overload):是一个类中多态性的一种表现,指同一个类中不同的函数使用相同的函数名,但是函数的参数个数或类型不同。可以有不同的返回类型;可以有不同的访问修饰符;
2 重写:
重写(Override): 是父类与子类之间的多态性,是子类对父类函数的重新实现。函数名和参数与父类一样,子类与父类函数体内容不一样。子类返回的类型必须与父类保持一致;子类方法访问修饰符的限制一定要大于父类方法的访问修饰(public>protected>default>private)
3 区别:
重载实现于一个类中;重写实现于子类中。