关于类的声明
class MyClass{} Internal class MyClass {}
Internal为类声明的默认修饰符,声明为内部类表示只有当前项目中的代码才能访问它。可以用Internal进行显示声明,但是没有必要。
相对于Internal,Public修饰符表示可以有其他项目的代码来访问。(“二级”修饰符abstract和sealed为抽象类和最终类修饰。)
类的继承:
C#中只能有一个基类,不允许派生类的可访问性比基类高。
继承:
class DrivedClass : BaseClass { ... ... }
接口:
class Class : Interface { ... ... }
派生且接口:
class DrivedClass : BassClass, Interface { ... ... }
C# 中只能继承一个基类,但是可以连接多个接口:
class DrivedClass : BassClass, Interface1, Interface2 ,…,Interfacen { ... ... }
注意:所有接口成员必须在实现类中实现,如果不想进行实现可以提供一个空的函数执行体。
接口:
声明与类类似,关键词为Interface,接口中不包含实现代码,而且能够被继承,在接口中abstract与sealed无意义,不能使用。
接口与抽象类的区别:
相同点:1)都包含由派生类继承的成员;
2)不能直接实例化、可以声明其变量。通过变量控制访问的成员变量。
不同点:1)抽象类:可以拥有抽象成员(没代码体,且必须在派生类中实现否则派生类也是抽象的)和非抽象成员
接口:只能声明并由使用接口的类实现
2)抽象类: 成员可以公有和私有或其他性质。
接口: 接口成员都是共有,禁止定义类型成员,但是隐藏基接口可以用new隐藏函数。
3)接口不能包含字段、构造函数、析构函数、静态成员或常量。
接口的实现:
对于定义属性:声明set、get访问器,类似于类中的自动属性,但又不同。
可以使用virtual和abstract来执行接口成员,但是不能使用static和const。
接口成员的现实执行和隐式执行:
public void interface.fun(); //显示执行 public void fun(); //隐私执行。
其执行为:
Class ob = new class(); Ob.fun(); //隐私执行。 Interface obIn = ob; obIn.fun(); //显示执行,此时Ob.fun();失败;
用非公共的可访问性添加属性访问器
public interface IMyInterface { int MyIntProperty { get; } } public class MyBaseClass : IMyInterface { protected int myInt; public int MyIntProperty { get { return myInt; } protected set { return myInt; } } }
部分类定义(实现功能分块或者声明实现):
1、#region 函数说明
#endregion
2、partial class PartClassTest{} 利用partial关键词将不同的功能块在不同的文件中进行定义。
3、为了实现方法与实现的分离,可以利用partial进行函数分块。但是需要注意的是分部方法不能具有访问修饰符或 virtual、abstract、override、new、sealed 或 extern 修饰符
类成员:
成员:访问级别:添加internal 只能有项目内部的代码访问。
字段:(C++中成员变量)可以使用关键词readonly,表示只能在构造函数过程中赋值。相对于const较为灵活(const成员也是静态的)。
方法:
定义的关键词:virtual、abstract、override、extern
自动属性:public int MyData
{
get;
set;
}
MyData进行数据交换的细节操作为系统自行完成,底层的私有字段也由编译器完成,不能访问,同事set\get 必须全部保留。
基类成员的隐藏和重写
class baseclass { public void fun(){ }; } class driedclass : baseclass { //隐式隐藏,屏蔽基基类成员,编译器编译时候会发出警告; public void fun() { ... ... }; //隐式隐藏; new public void fun() { ... ... }; //重写,实现多态性; public override void fun(){ { ... ... }; }