189 8069 5689

C#forUnity快速入门(连载8)-C#抽象类与接口-创新互联

 C# for Unity 编程语言快速入门教程(连载8)---C#OOP编程之抽象类与接口

成都创新互联-专业网站定制、快速模板网站建设、高性价比大新网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式大新网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖大新地区。费用合理售后完善,十多年实体公司更值得信赖。

  C#的抽象类与接口,是C#OOP编程中非常重要的概念,对于开发出“高内聚、低耦合”的优秀项目具有重要的作用。

  C#抽象类是用关键字abstract 表示的,它即可以修饰类(抽象类),也可以修饰方法(抽象方法)。抽象类主要的作用是:列举一个类所需要的行为,提供一系列的规定,约束子类行为。

 C#抽象类与抽象方法具备以下重要规则:

 1:抽象类不能被实例化。

 2:抽象类不明确提供具体 方法实现。(但可以包含普通的方法)

 3:定义基类(父类)中的抽象方法,则派生类(子类)必须重载(重写)该方法。
 4:抽象方法一定属于抽象类,但抽象类不一定要包含抽象方法。
 5:抽象方法不能是私有的,而且抽象方法及其重载方法的访问限制应当相同。
 6:抽象方法不能使用virtual 关键字进行修饰。
 7:抽象类不能是密封或静态的 。

 8:抽象类必须由其子类实现它的抽象方法,除非子类也是抽象类。

 9:继承抽象类的派生类,必须使用override 实现抽象方法。

10:抽象方法一定属于抽象类,但抽象类不一定要包含抽象方法。

 我们生活中的接口是: “不同物理设备与软件程序实现沟通与数据传输的规格与标准”(例如:USB接口,即可以应用在鼠标链接上,也可以应用在移动硬盘、USB盘、手机、数码相机、充电宝....)
 C#中的接口就是:“某个事物对外提供的一些功能的申明”,我们使用interface 关键字来声明一个接口,注意这里接口是一个与类“平行”的编程单位,相互之间没有隶属关系。

 C#的接口具备以下重要规则:

 1: 接口可以继承,类似类的继承。

 2: 接口可以实现多重继承,类不可以。

 3: 可以把接口理解为更纯的抽象类,因为接口中所有的方法都是抽象的,没有普通方法。

 4: 接口和抽象类不能被实例化。

 5: 接口的任何派生实现类,都必须实现接口的所有方法。

 6: 接口不允许有任何构造函数或字段。

 7: 接口成员总是公共的,不能声明虚拟和静态的。

 8: 接口中不允许指定任何访问修饰符,(隐式为public)不需要访问修饰符。

 9: 类不允许多继承,但接口允许多继承。
     好的编程习惯: 使用接口名作为方法的前缀,这称为“显示接口实现”。
     对于明确指定了接口的方法,就不再允许使用修饰符,一律为 public。

 以上两篇文章我们学习了方法重载,方法重写,抽象类,抽象方法,接口等。现在总结一些概念之间的区别点:

 1:不能同时使用 virtual 和 override 修饰一个方法。
 2:虚拟方法不能是私有的。
 3:对于 interface 、virtual、override、sealed 关键字的理解:
       interface: 引入一个方法的名称
       virtual:  方法的第一个实现。
       override: 方法的另一个实现。
       sealed:   方法的最后一个实现。

  目前关于C#基础编程,截至本篇笔者提供了8篇技术介绍性文章,现在提供从类的访问修饰符到目前接口的一些典型学习习题,供C#初学者学习之用。

编程题目:

1: 学习定义类与访问修饰符。
1.1>: 已知交通工具类定义如下。
class Vehicle
{
  private int _length; //长度
  private int _width;  //宽度

  public void Drive(){}; //驾驶方法
}
要求:(1)实现设个类;(2)定义并实现一个小车类car,是它的派生类,小车本身的私有属性有载人数,小车的方法有init(设置车轮数、重量和载人数),get passenger(获取载人数),print(打印车轮数、重量和载人数)。

2: 学习继承
 2.1>: 编写一个学生和教师的数据输入和显示程序,学生数据有编号、姓名、班号和成绩,教师数据有编号、姓名、职称和部门。要求将编号、姓名输入和显示设计成一个类person,并作为学生数据操作类student和教师数据操作类teacher的基类。

3: 方法重载(静态多态性)
  3.1>:   利用多态性实现多功能计算器:
         A)定义方法名为computeMethod 的方法,实现加法器。
         B)再定义方法名为computeMethod 的方法,实现具备加减乘除综合计算功能。
         C)在main 方法中调用以上方法,且测试。
  3.2>:   利用多态性实现如下功能。
        A)定义一个Father 类,利用构造方法的重载概念定义三个构造方法。
        B)定义Child 类继承Father类,在Child的构造方法中分别调用父类不同的构造方法。

4: 方法重写
  4.1>: 设计一个基类,在其中创建方法MConvert,这个方法接受一个代表公里数的参数,将其转换为对等的英里数之后,然后创建一个继承此类的子类,增加可将输入的公斤数转换为磅的新方法 KConvert, 最后产生子类的实例对象, 测试这两个功能。
  提示信息:
  1千米(公里) = 0.62英里
  1千克(公斤) = 2.2磅

  4.2>: 调整上一题的内容,将其中的MConvert方法声明为virtual, 然后在子类中进行覆写,以其所接受的参数为正方形边长,转换为英里后计算其面积。

  4.3>: 创建一个类,重写ToString() 方法, 当其被引用的时候,能够输出此类对象的说明文字,如下:  “测试用的myObject 类对象”

5: 抽象类、抽象方法
 5.1>: 编写一个程序,求圆、圆内接正方形和圆外切正方形的面积和周长。要求设计抽象基类、抽象方法,使用动态多态性。
     提示信息:
      公式: 勾股定义: 直角三角形中两边长平方的和等于第三边的平方:a*a+b*b=c*c
      圆的半径使用 r:
     内切正方形的边长=r*r+r*r=x*x
                               x=sqrt(2(r*r))
     内切正方形面积
             x*x
     内切正方形周长
                 4x
      外切正方形面积
               (r*2)*(r*2)
     外切正方形周长
               (r*2)*4=8r

      形状:  shape
      圆:    circle
      正方形: square、
      面积:  area.
      周长:  length.

 5.2>:下面Shape类是一个表示形状的抽象类,Area ( )为求图形面积的函数。请从Shape类派生梯形类(Trapezoid)、圆形类(Circle),三角形类(Triangle),并给出具体的求面积函数。其中,所有派生类计算面积需要用到的参数由构造函数给出,梯形面积计算需要上底、下底和高,三角形面积需要底和高,圆形面积需要半径。
形状的抽象类声明如下:

abstract class Shape {
 abstract public double Area( );
}

6: 接口、多重接口

  6.1>:A)定义Calculate接口,

    接口文件如下:
    interface Calculate
    {
         void getArea(); //计算圆面积。
         void getZC();   //计算圆周长
     }

   B) 定义circularity 类,实现接口Calculate. 且调试后输出结果。

 6.2>: 设计一个类TClass, 继承下面的接口IMeasure, 实现其中的Length() 与 Area()方法,来计算特定长度等边三角形的边长和面积。
    interface IMeasure
    {
      int Length(int s);
      int Area(int s);
    }

 6.3>  承上题,设计一个测试程序,创建TClass 的实例对象,调用其中的方法计算边长为10的三角形面积和周长。

 6.4>: 承上题,设计一个测试程序,创建TClass 的实例对象,将其转型为 IMeasure 类型,调用其中的方法来计算边长为10的三角形面积和周长。

 6.5>: 另外设计一个新的类,同时继承下面的接口 IAMeasure 及上面第2题的IMeasure,除了提供对特定长度等边三角形的边长与面积的计算方法外,还实现了IAMeasure的Area()成员,提供对正方形面积的计算方法。
   interface IAMeasure
    {
      int Area(int s);
    }

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


分享标题:C#forUnity快速入门(连载8)-C#抽象类与接口-创新互联
文章源于:http://jkwzsj.com/article/cosois.html

其他资讯