第九章类定义

 C#中的类定义:
 c#使用class关键字来定义类:
  class MyClass {}
 默认情况下,类声明为内部的,即只有当前项目中的代码才能访问它。可以使用internal访问修饰符关键字显示指定(这个是不必要的)。
  internal class MyClass {}
 指定类是公共的,要使用关键字public
  public class MyClass {}
 以这种方式声明的类不能是私有的或受保护的。
 指定类是抽象的(不能实例化,只能继承,可以有抽象成员),可以是公共抽象类,也可以是内部抽象类
  abstract class MyClass {}
 指定类是密封的(sealed,不能继承),可以是公共密封类,也可以是内部密封类
  sealed class MyClass {}
 注意:在c#的类定义中,只能有一个基类,如果继承了一个抽象类,就必须实现继承的所有抽象成员(除非派生类也是抽象的)
       编译器不允许派生类的可访问性高于基类。即内部类可以继承与一个公共基类,但是公共类不能继承与一个内部类。
   public class MyBase {}
   internal class MyClass :MyBase {}
    如果没有使用基类,则被定义的类就只能继承于System.Object
    除了以这种方式指定基类外,还可以在冒号之后指定支持的接口。如果指定了基类,它必须紧跟在冒号的后面,之后才是指定的接口。
    如果没有指定基类,则接口就跟在冒号的后面。必须使用逗号分隔基类名(如果有基类)和接口名。
   public class MyClass : MyBase , IMyInterface
   public class MyClass : 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
 所有的类都继承与System.Object
 GetType()
  以System.Type的对象的形式返回对象的类型
 typeof()
  可以把类名转化为System.Type对象。
 构造函数和析构函数
  在C#中定义类时,常常不需要定义相关的构造函数和析构函数,因为在建立代码时,如果没有提供它们,编译器会自动添加它们。
  在.NET中使用的析构函数(由System.Object类提供)叫做Finalize(),但这不是我们用于声明析构函数的名称。
  构造函数初始化器:它把代码放在方法定义的冒号后面。可以在派生类的构造函数定义中指定所使用的基类构造函数。
   public MyClass(int i, int j):base(i)
      除了base关键字外,这里还可以将另一个关键字this用作构造函数初始化器。
类库项目:
 如果一个项目什么都不包含,只包含类(以及其他相关的类型定义,但没有入口点),该项目就称为类库。
 类库项目编译为.dll程序集,在其他项目中添加对类库项目的引用,就可以访问它的内容。这将扩展对象提供的封装性。
接口和抽象类
 类似之处:
  1.都包含可以由派生类继承的成员
  2.都不能直接实例化
 区别:
  1.派生类只能继承一个基类,即只能直接继承一个抽象类(但可以用一个继承链包含多个抽象类)
    类可以使用任意多个接口。只是采用接口的方式略有不同
  2.抽象类可以拥有抽象成员(没有代码体)和非抽象成员(拥有代码体)
    接口成员必须都在使用接口的类上实现(没有代码体)
  3.接口成员是公共的
    抽象类的成员可以是私有的、受保护的、内部的、或受保护的内部成员
  4.接口不能包含字段、构造函数、析构函数、静态成员或常量
  5.抽象类主要用作对象系列的基类,共享某些主要特性
    接口则主要用于类,这些类在基础水平上有所不同,但仍可以完成某些相同的任务。
结构类型:
    结构是值类型,而类是引用类型。
浅度和深度复制:
 浅度复制:通过MemberwiseClose()方法实现,没有考虑引用类型成员,新对象中的引用成员就会指向与源对象中相同成员的对象
 深度复制:实现ICloneable接口,创建成员的新实例(复制值,而不是复制引用)
 
 
 
 
 
 
 
 
 
 
  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值