zoukankan      html  css  js  c++  java
  • review——C# (7)抽象成员和抽象类

    FROM P141

    1.抽象成员

    抽象成员是指设计为被覆写的函数成员。有以下特征:

    □必须是一个函数成员。即字段和常量不能为抽象成员。

    □必须用abstract修饰符标记。

    □不能有实现代码块。抽象成员的代码用分号表示。

    例如,下面取自一个类定义的代码声明了两个抽象成员:一个抽象方法、一个抽象属性

    1         abstract public void PrintStuff(string s);//分号替换实现
    2         abstract public int MyProperty
    3         {
    4             get;//分号替换实现    
    5             set;//分号替换实现
    6         }

    抽象成员只可以在抽象类中声明。一共4种类型的成员可以声明为抽象的:

    方法、属性、事件、索引

    其他事项如下:

    □尽管抽象成员必须在派生类中用相应的成员覆写,但不能把virtual修饰符附加到abstract修饰符

    □类似虚成员,派生类中抽象成员的实现必须指定override修饰符

    下图对虚成员和抽象成员进行了比较:

    2.抽象类

    抽象类就是指设计为被继承的类。抽象类只能用作其他类的基类。

    □不能创建抽象类的实例

    □抽象类使用abstract修饰符声明

    1     abstract class MyClass                           //基类
    2     {
    3         ……
    4     }

    抽象类可以包含抽象成员和普通的非抽象成员。抽象类的成员可以是抽象成员和普通带实现成员的任意组合。

    □抽象类可以派生自另一个抽象类。

    1     abstract class MyClass                           //基类
    2     {
    3         ……
    4     }
    5     abstract class AbClass : MyClass
    6     {
    7         ……
    8     }

    □任何派生自抽象类的类必须使用override关键字实现该类所有的抽象成员,除非派生类自己也是抽象类。

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 
     7 namespace review
     8 {
     9     abstract class AbClass                           //抽象类
    10     {
    11         public void IdentifyBase()                   //普通方法
    12         {
    13             Console.WriteLine("I am AbClass");
    14         }
    15         abstract public void IdentifyDerived();      //抽象方法
    16         abstract public int MyInt { get; set; }      //抽象属性
    17     }
    18     class DerivedClass : AbClass
    19     {
    20         public override void IdentifyDerived()
    21         {
    22             Console.WriteLine("I am DerivedClass");
    23         }
    24         private int _myInt;
    25         public override int MyInt
    26         {
    27             get
    28             {
    29                 return _myInt;
    30             }
    31 
    32             set
    33             {
    34                 _myInt = value;
    35             }
    36         }
    37     }
    38     class Program
    39     {
    40         static void Main(string[] args)
    41         {
    42             //AbClass a = new AbClass();            //错误 抽象类不能实例化
    43             //a.IdentifyDerived();
    44             DerivedClass b = new DerivedClass();    //实例化派生类
    45             b.MyInt = 28;
    46             b.IdentifyBase();                       //调用继承的方法
    47             b.IdentifyDerived();                    //调用抽象方法
    48             Console.WriteLine(b.MyInt);
    49             Console.Read();
    50         }
    51     }
    52 }
    53 /*
    54  * 输出如下:
    55  * I am AbClass
    56  * I am DerivedClass
    57  * 28
    58  * */
  • 相关阅读:
    text-overflow white-space word-break word-wrap word-spacing line-clamp 傻傻分不清楚0.0=>文本超出显示省略号/数字英文字母折行有关css 属性/显示两行,第二行省略号显示css方法
    jq 操作表单中 checkbox 全选 单选
    用 pdf.js兼容部分安卓显示PDF在线预览 时,a标签直接链接参数文件不能含中文的解决办法
    通过form实现enter事件
    小白随笔之数组的方法
    引用类型之Array
    Reset
    js常用事件
    让女朋友能懂的网络技术篇之动态代理
    图论之Dijkstra算法
  • 原文地址:https://www.cnblogs.com/quintessence/p/9110224.html
Copyright © 2011-2022 走看看