zoukankan      html  css  js  c++  java
  • 9.1C#中类的定义

    9.1 C#中类的定义

    C#使用class关键字来定义类   【默认internal

    class MyClass
    
    {
    
    //Class Members
    
    }

    在默认情况下,类声明为内部的,即只有当前项目中的代码才能访问它。可以用internal访问修饰符关键字显示指定,如下所示(但这是不必要的)

    internal class MyClass
    
    {
    
    //Class Members
    }

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

    public class MyClass
    {
    //Class members.
    }

    注意:以这种方式声明的类不能是私有或受保护的。可以把这些类的修饰符用于声明类成员,详见第10章

    除了这两个访问修饰符关键字外,还可以指定类是抽象的(不能实例化,只能继承,可以有抽象成员)或密封的(sealed,不能继承)。

    为此可以使用两个互斥的关键字abstract或sealed。

    所以抽象类必须用下述方式声明

    public abstract class MyClass
    {
    //Class members,may be abstract
    }

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

    密封类的声明如下所示

    public sealed class MyClass
    {
    //Class Members.
    }

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

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

    public class MyClass:MyBase
    {
    //Class members.
    }

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

    编译器不允许派生类的可访问性比其基类更高。也就是说,internal类可以继承于一个public类,但是public类不能继承于一个internal类

    因此,下述代码是合法的

    public class MyBase
    {}
    internal class :MyBase
    {}

    但下述代码不能编译

    internal class MyBase{}
    public class MyClass:MyBase
    {}

    如果没有使用基类,则被定义的类就只继承于基类System.Object(别名是object)

    毕竟,在继承层次结构中,所有类的根都是object,稍后将详细介绍这个类

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

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

    public class MyClass:IMyInterface{}

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

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

    public class MyClass:IMyInterface,MyBase{}

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

    public class MyClass:MyBase,IMyInterface{}

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

    public class MyClass:MyBase,IMyInterface,IMySecondInterface{}

    下表是类定义中可以使用的访问修饰符的组合

    修饰符 含义
    无或internal 类只能在当前项目中访问
    public 类可以在任何地方访问
    abstract或internal abstract 类只能在当前项目中访问,不能实例化,只能继承
    public abstract 类可以在任何地方访问,不能实例化,只能继承
    sealed或internal sealed 类只能在当前项目中访问,不能派生,只能实例化
    public sealed 类可以在任何地方访问,不能派生,只能实例化

    接口的定义

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

    interface IMyInterface{}

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

    public interface IMyInterface{}

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

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

    public interface IMyInterface:IMyBaseInterface,IMyBaseInterface2{}

    接口不是类,所以没有继承System.Object。但是为了方便,System.Object的成员可以通过接口类型的变量来访问

    如上所述,不能用实例化类的方式来实例化接口。

  • 相关阅读:
    201521044091《Java程序设计》第7周学习总结
    201521044091《java程序设计》第四次总结
    201521044091 《java程序设计》第八周学习总结
    201521044091 《Java程序设计》第5周学习总结
    201521044091 《Java程序设计》第2周学习总结
    201521044091 《Java程序设计》第3周学习总结
    MySQL设置字符集CHARACTER SET
    Create My MySQL configuration by Percona
    How to use jQuery to manipulate Cookies
    How to use OpenXml to import xml data to Sql server
  • 原文地址:https://www.cnblogs.com/chucklu/p/4050167.html
Copyright © 2011-2022 走看看