C#类的认识

        

C#是由类组成的。在接下来的讲解中我讲通过类将C#面向对象编程基础串一遍。

我把类分为三种:抽象类、接口、实体类

抽象类

对于一个类当我们使用关键字abstract的时候,这个类就是抽象类。

抽象类和抽象方法存在的意义?

      为了能够实现基类和派生类对方法Print的多态行为,通常情况下我们需要首先,在基类Person将Print方法声明为虚方法,然后在多层派生类中,运用覆载重写Print方法,得到Student和GraduateStudent的属于自己的Print方法。这样就可以实现多态行为。而实际情况是,有的时候,我们没有必要在基类Person中也定义Print方法的具体实现过程,我们并不关心或使用到基类Person的Print方法,不需要基类的Print方法为我们提供任何服务,在这种情况下,编写基类Person的Print方法的具体实现过程,就会显得毫无意义和浪费时间,我们要使用的仅仅只是派生类Student或GraduateStudent的Print方法,并能够实现Print方法的多态行为。这个时候,多态就派上用场了,我们只需将基类的Print方法声明为抽象方法,只提供方法头,而不必编写方法体的具体实现内容。

接口

接口可以看成是一种特殊的类。从程度上看,接口要比抽象类更为抽象,而抽象类则比具体类来得抽象。

特点:

  1. 类实现接口;
  2. 接口中不包含任何代码,有的只是契约;
  3. 类不能够多重继承,而接口可以实现多重继承;

在接口的实现中,如果有不同命名空间的两个相同名字的接口需要我们实现,该如果实现呢。

实体类

下面通过实体类来说明一下类的内脏器官。

创建类和对象

类的声明

[属性集信息] [类修饰符] class 类名 [:基类]

{

[类成员]        //包括类的属性和方法

}

 

类的实例化(创建对象)

类名 对象名= new 类名();

构造函数和析构函数

构造函数和析构函数没有返回类型。

构造函数

当我们定义一个一个类之后,就可以通过new运算符将其实例化,产生一个对象。为了能够规范安全的使用这个对象,C#提供了实现对象进行初始化的方法,这就是构造函数。

语法形式:

[访问修饰符] <类名>([参数列表])

{

//构造函数的主体

}

如果要写一个带参数的构造函数,一点要写一个空的构造函数(不带参数的构造函数),否则会出错。

一个学生类的举例

class student
   {
       internal string studentNo,studentName, studentSex;
       internal int studentAge;
       public student()    //一个静态构造函数,不带参数

       {
         //对student类的四个属性赋予初始值
           studentNo = "10001";
           studentName ="小王";
           studentSex ="男";
           studentAge = 19;
       }

       //带参数的构造函数
       public   student(string no,string name,string sex,int age)
       {
           studentNo = no;
           studentName = name;
           studentSex = sex;
           studentAge = age;
       }
   }

 

 

析构函数

一般来说,创建一个对象时需要用构造函数初始化数据,与相对应释放一个对象时就用析构函数。所以析构函数是用于实现析构类实例所需操作的方法。

语法形式:

~    <类名>()

{

//析构函数的主体

}

析构函数不能写返回类型,也不能带参数,一个类最多只有一个析构函数。

如果没有显示的声明析构函数,则编译器自动产生一个默认的析构函数。

注意:析构函数不能由程序显示的调用,而是由系统在释放对象时自动调用。

方法

语法格式:

[访问修饰符]    返回类型   <方法名>(参数列表)

{

//方法主体

}

默认的访问修饰符为private,如果不需要返回任何值,使用void类型。

当我们声明一个方法后,调用时语法:

对象名.方法名([参数列表]);

静态的方法不需要实例化,就可以直接调用。

类的数据成员可以分为静态字段和实例字段。静态字段是和类相关联的,不依赖特定对象的存在;实例字段是和对象相关联的,访问实例字段依赖于实例的存在。因此根据静态字段和实例字段的特性,构造函数将其分为静态构造函数和实例构造函数,方法也将其分为静态方法和实例方法。

通常,一个方法使用static修饰符时,则表明该方法为静态方法,同时说明它只对这个类中的静态成员操作,不可以直接访问实例字段。

方法的重载

方法的重载是指能够具有不同数量参数或者返回值不同的方法。但是方法名必须相同。像这样的方法的集合叫做方法的重载。

作用:让类以统一的方式对不同数据执行相似的功能。

属性

C#使用属性实现了良好的数据封装和数据隐藏。把字段域和访问他们的方法相结合。对类的用户而言,属性的值和写于字段域语法相同;对编译器来说属性值得读和写是通过类中的封装的特别方法“get”和“set”访问器实现的。属性点的声明方法如下:

[属性集信息]        [属性修饰符]        类型 成员名

{

访问器声明

}

属性修饰符:与方法修饰符相同

类型:指定该声明引入的属性的类型。

成员名:指定该属性的名称。

访问器声明:声明属性的访问器,可以是一个get访问器或一个set访问器,或者两个都有。

继承

继承是面向对象语言的基本特征,是实现代码复用的手段。继承使得在原有的类的基础上对原有程序进行扩展,从而提高程序开发的速度实现代码的复用。继承不但可以使用类的所有功能,还可以对这些功能进行扩展。继承产生的类成为派生类或子类。被继承的类成为父类或基类

Base关键字:调用基类对象的构造函数,也可以调用基类的方法。

多态

多态也是面向对象语言的基本特征之一。指在程序执行之前无法根据函数名和参数确定调用哪一个操作,而在程序执行过程中,根据实际运行情况动态确定,从而代理编程的高度灵活性。使用虚方法可以实现多态。

重载与覆写的区别:

重载:特定方法名必须相同;参数列表必须不相同;返回类型可以不相同。

覆写:子类中为了满足自己的需要来重复定义某个方法的不同实现;通过使用override关键字来实现覆写;只有虚方法(virtual)和抽象方法(abstract关键字)才能被覆写;要求(三相同):相同的方法名;相同的参数列表;相同的返回类型。

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值