C#中的类定义
C#使用class关键字来定义类:
class MyClass
{
// Class members.
}
默认情况下,类声明为内部的,即只有当前工程中的代码才能访问
也可以用internal关键字显式声明:
internal class MyClass
{
// Class members.
}
可以指定类是公共的,即可以由其他工程中的代码来访问
要用public关键字声明:
public class MyClass
{
// Class members.
}
还可以指定类是
抽象类:不能实例化,只能继承,可以有抽象成员,使用关键字abstract
密封类:不能继承,使用关键字sealed
声明抽象类:
public abstract class MyClass
{
// Class members, may be abstract.
}
抽象类可以是public的,也可以是internal的
声明密封类:
public sealed class MyClass
{
// Class members.
}
抽象类可以是public的,也可以是internal的
可以在类定义中指定继承,方式是类名后加冒号再加基类名:
public class MyClass : MyBase
{
// Class members.
}
注意:在C#中只能有一个基类,如果继承了个抽象类,就必须执行所继承的所有抽象成员(除非派生类也是抽象的)
编译器不允许派生类的可访问性比其基类更高
即内部类可以继承于一个公共类,但公共类不能继承于一个内部类
如果没有指定基类,那么被定义的类继承自System.Object
还可以在冒号后面指定支持的接口
如果指定了基类,冒号后面跟着基类名,再接着一个或多个指定的接口,之间用逗号分割
例如:
给MyClass指定一个接口:
public class MyClass : IMyInterface
{
// Class members.
}
给MyClass指定基类和接口:
public class MyClass : MyBase, IMyInterface
{
// Class members.
}
指定多个接口:
public class MyClass : MyBase, IMyInterface, IMySecondInterface
{
// Class members.
}
访问修饰符组合:
修饰符 含义
none or internal 类只能在当前工程中访问
public 类可以在任何地方访问
abstract or internal abstract 类只能在当前工程中访问,不能实例化,只能继承
public abstract 类可以在任何地方访问,不能实例化,只能继承
sealed or internal sealed 类只能在当前工程中访问,不能派生,只能实例化
public sealed 类可以在任何地方访问,不能派生,只能实例化
接口的定义
与类的声明方式类似,使用interface关键字:
interface IMyInterface
{
// Interface members.
}
修饰符关键字public和internal的使用方式相同:
public interface IMyInterface
{
// Interface members.
}
关键字abstract和sealed不能在接口中使用
因为接口不包含执行代码,不能直接实例化,而且必须可以继承
接口继承跟类相似,不过可以使用多个基接口:
public interface IMyInterface : IMyBaseInterface, IMyBaseInterface2
{
// Interface members.
}
接口不是类,不从System.Object继承
由于多态性使System.Object的成员可以使用这些接口
System.Object
公共构造函数
Object 初始化 Object 类的新实例。
公共方法
Equals 已重载。 确定两个 Object 实例是否相等。
GetHashCode 用作特定类型的哈希函数。
GetType 获取当前实例的 Type。
ReferenceEquals 确定指定的 Object 实例是否是相同的实例。
ToString 返回表示当前 Object 的 String。
受保护的方法
Finalize 析构函数
MemberwiseClone 创建当前 Object 的浅表副本。