类和接口的定义

5 本我 18小时前 138次点击

类的定义

class MyClass

{

...

}

另外class MyClass{}默认是

internal class MyClass

{

...

}

另外,还可以指定类是公共的,可由其他项目中的代码来访问。为此,要使用关键字public:

public class MyClass

{

...

}

还可以指定类是抽象的(abstract,不能实例化,只能继承,可以有抽象成员)或密封的(sealed,不能继承)

public abstract class MyClass

{

...

}

其中MyClass是一个公共抽象类,也可以是内部抽象类。

密封类的声明如下所示:

public sealed class MyClass

{

...

}

与抽象类一样,密封类也可以是公共的或内部的。

还可以在类定义中指定继承。为此,要在类名的后面加上一个冒号,其后是基类名,例如:

public class MyClass :MyBase

{

...

}

注意,在C#的类定义中,只能有一个基类。如果继承了一个抽象类,就必须实现所继承的所有抽象成员(除非派生类也是抽象的)。

编译器不允许派生类的可访问性高于基类。也就是说,内部类可以继承于一个公共基类,但公共类不能继承于一个内部基类。因此,下述代码是合法的:

public class MyBase

{

...

}

class MyClass : MyBase

{

...

}

但下述代码不能编译:

class MyBase

{

...

}

public class MyClass : MyBase

{

...

}

如果没有使用基类,被定义的类就只继承于基类System.Object(它在C#中的别名是object)。

除了以这种方式指定基类外,还可在冒号之后指定支持的接口。如果指定了基类,它必须紧跟在冒号的后面,之后才是指定的接口。如果未指定基类,接口就跟在冒号的后面。必须使用逗号来分隔基类名(如果有基类的话)和接口名。

例如,给MyClass添加一个接口,如下所示:

public class MyClass : IMyInterface

{

...

}

支持该接口的类必须实现所有接口成员,但如果不想使用给定的接口成员,可以提供一种“空”的实现方式(没有函数代码)。还可以把接口成员实现为抽象类中的抽象成员。

下面的声明是无效的,因为基类MyBase不是继承列表中的第一项:

public class MyClass : IMyInterface, MyBase

{

...

}

指定基类和接口的正确方式如下:

public class MyClass : MyBase, IMyInterface

{

...

}

可以指定多个接口,所以下列代码也是有效的:

public class MyClass : MyBase,IMyInterface, IMySecondInterface

{

...

}

接口的定义

声明接口的方式与声明类的方式相似,但使用的关键字是interface而不是class,例如:

interface IMyInterface

{

...

}

访问修饰符关键字public和internal的使用方式是相同的,与类一样,接口也默认定义为内部接口。所以要使接口可以公开访问,必须使用public关键字:

public interface IMyInterface

{

...

}

不能在接口中使用关键字abstract和sealed,因为这两个修饰符在接口定义中是没有意义的(它们不包含实现代码,所以不能直接实例化,且必须是可以继承的)。

也可以用与类继承类似的方式来指定接口的继承。主要的区别是可以使用多个基接口,例如:

public interface IMyInterface : IMyBaseInterface, IMyBaseInterface2

{

...

}

接口不是类,所以没有继承System.Object。但为了方便起见,System.Object的成员可以通过接口类型的变量来访问。如上所述,不能用实例化类的方式来实例化接口。

示例:

namespace 录音

{

public abstract class 我的基类 { }

class 我的类 : 我的基类 { }

public interface 我的基类接口 { }

interface 我的基类接口2 { }

interface 我的接口 : 我的基类接口, 我的基类接口2

{ }

sealed class 我的复杂类 : 我的类, 我的接口

{ }

class Program

{

static void Main(string[] args)

{

我的复杂类 myObject = new 我的复杂类();

WriteLine(myObject.ToString());

ReadKey();

}

}

}


共 2 条评论
海市蜃楼 17小时前
0 
额,这说的都是啥啊?听不懂。
美好的盼望 17小时前
0 

编程的函数代码语言。

添加一条新评论

登录后可以发表评论 去登录