(4)C#基础知识_类相关知识

1. 类的成员

 类的成员分为数据成员和函数成员,如下图所示:

2. 类的访问修饰符

1)类的访问修饰符

   (1)public:其他程序集中可访问类。

   (2)internal:其他程序集不可访问类。

   tips

  • C++无类访问修饰符。

2)成员访问修饰符

 (1)public:任意访问。

 (2)pritate:仅类内部可访问。

 (3)protect:类内部和继承类可访问。

 (4)internal:等同于internal public(取交集),同程序集类可任意访问。

 (5)protect internal:取并集。

3. 类的继承

C#类的继承,其主要特性如下:

  • C#不能继承多个类(C++可以),但能继承继承多个接口。
  • C++有公有、私有、保护继承,但C#没有,只有公有继承。
  • C#重写(屏蔽)基类成员,要加new字段,C++不用。重载(override)一样。
  • C#有base基类访问符号,C++没有,因为这有点违反多态了。C++只能先转换为基类,然后调用非重载成员。

4. 构造函数、

1)构造函数,其主要特性如下:

  • 与C++不同,如果你为类声明了任何构造函数,编译器不能为该类定义默认构造函数(改进,因为默认构造函数本来就是不靠谱的东西)
  • 与C++一样,C#派生类调用构造函数时,也是先调用基类构造函数,再调用派生类构造函数。
  • 静态构造函数只能有一个,且不能带参数,不能有访问修饰符,在引用静态成员,或创建类的任何实例前会被调用。C++没有静态构造函数。

5. 析构函数、dispose模式、using语句

1)资源与using语句

   对于某些有数量限制的非托管资源(GC无法自动释放非托管资源)或很消耗系统的资源(不等GC释放,自己释放),为了尽可能快的释放他们,我们让这类资源(资源的具体形式是类或结构)定义时,实现IDisposable接口(含有一个dispose函数),然后使用资源时,可以利用using语句,简化资源的分配、使用和释放,如下图:

实例:

 

2)析构函数与dispose模式,其主要特性如下:(一般使用using语句即可)

  • 对于非托管资源,GC无法释放时,使用析构函数或dispose模式释放。
  • dispose模式是指实现IDispose接口的Dispose接口,然后自己主要调用释放资源。

6. 静态类、静态数据成员,静态函数成员

1)静态类,其主要特性如下:

  • 仅包含静态成员。
  • 可以声明一个静态构造函数,但是无法无法实例化。静态构造函数不可被直接调用,当创建类实例或引用任何静态成员之前,静态构造函数被自动执行,并且只执行一次。
  • 不能被继承,是密封(sealed)的。

2)静态成员与静态函数,其主要特性如下:

  • 静态函数不能访问非静态成员,非静态函数能访问静态成员。
  • 静态函数只能被重载,不能被重写(new)。
  • 不能声明局部静态成员。const行为上具有static属性,但可声明为局部变量。readonly不具有静态属性,可不再声明时赋予初值。

tips:

  • C++没有静态类,也没有静态构造函数。
  • C++和C#静态函数成员都不能直接引用非静态成员,因为没有this指针。
  • C#不能通过实例化对象引用静态成员,但C++可以。

7. 抽象类,抽象函数成员

1)抽象函数成员,类似C++的纯虚函数。抽象方法要被实现,所以不能是静态的,也不能是私有的。

  • C#:abstract pulic void add();
  • C++:public : virtual void add() = 0;

2)抽象类

抽象类是指设计为被继承的类,其主要特性如下:

  • C#中的抽象类是指加了abstract修饰符的类,C++是指包含纯虚函数的类。
  • C#和C++抽象类都不能被实例化。
  • C#继承抽象类必须实现其所有抽象函数,C++不需要,在派生类中未实现的类依然是纯虚函数,但派生类并不是抽象类。
  • C#抽象类里可以有非抽象函数,但抽象函数必须在抽象类里。同样C++只要包含纯虚函数的类被称为抽象类,抽象类里可以有非抽象函数。
  • C++和C#抽象类都可以有构造函数,对数据成员进行初始化。

3)一个抽象类的例子

      

8. 接口 

   接口,是指定一组函数成员而不实现它们的引用类型;接口是对行为的抽象,抽象类是对“类”的抽象。所有从概念上看,抽象类包含接口。

   1)接口和抽象类的具体比较如下:

   (1)派生类继承抽象类,必须实现其所有抽象方法,除非其也是抽象类;派生类继承接口,必须实现其所有方法。

   (2)抽象方法要被实现,所以不能是静态的,也不能是私有的;接口方法也不能为静态的,且不能声明访问类型,默认就是public的。

   (3)只能继承一个抽象类;可以继承多个接口。

 2)接口的例子:

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值