zoukankan      html  css  js  c++  java
  • C#图解教程读书笔记(第7章 类和继承)

    1、所有的类都继承自object

    2、如何隐藏基类的成员

    要隐藏一个继承的数据成员,需要声明一个新的相同类型的成员,并使用相同的名称。

    通过在派生类中声明新的带有相同签名的函数成员,可以隐藏或掩盖继承的函数成员。请记住,签名由名称和参数列表组成,但不包括返回类型。

    要让编译器知道你在故意隐藏继承的成员,使用new修饰符,没有它,程序可以成功编译,但编译器会警告你隐藏了一个继承成员。

    也可以隐藏静态成员。

    class SomeBase

    {

    public string cFiled;

    }

    class SomeClass : SomeBase

    {

    new public string cFiled;

    }

    3、基类访问使用base.的形式。

    4、虚方法和覆写方法

    基类的方法使用virtual,派生类的方法使用override,这样,就可以在派生类中,改变基类的方法。

    覆写的方法和被覆写的方法必须有相贩 可访问性,换一种说法,被覆写的方法不能是private,而覆写的方法是public。

    不能覆写static或非虚方法。

    方法、属性和索引,以及称为事件的另一种类型,它们都可以被声明为virtual和override。

    用override和new覆写函数

    class Program

    {

    static void Main(string[] args)

    {

    MyBaseClass cBase = new MyBaseClass();

    cBase.Print();

    MyDerivedClass cDevrived = new MyDerivedClass();

    cDevrived.Print();

    SecondDerived cSecond = new SecondDerived();

    cSecond.Print();

    MyBaseClass cBase2 = (MyBaseClass)cSecond;

    cBase2.Print();

    cBase2.Print2();

    Console.ReadKey();

    }

    }

    class MyBaseClass

    {

    virtual public void Print()

    {

    Console.WriteLine("This is the base class");

    }

    virtual public void Print2()

    {

    Console.WriteLine("This is the base class");

    }

    }

    class MyDerivedClass : MyBaseClass

    {

    public override void Print()

    {

    Console.WriteLine("This is the derived class");

    }

    override public void Print2()

    {

    Console.WriteLine("This is the derived class");

    }

    }

    class SecondDerived : MyDerivedClass

    {

    public override void Print()

    {

    Console.WriteLine("This is the Second Derived Class");

    }

    new public void Print2()

    {

    Console.WriteLine("This is the Second Derived Class");

    }

    }

    输出内容:

    用override不仅可以覆写函数,还可以覆写属性。

    5、构造函数的顺序

    6、声明为public的程序,可以跨程序集继承。

    7、访问成员的区域

    private 只在类的内部可访问

    internal 对该程序集内所有类可访问

    protected 对所有继承该类的类可访问

    protected internal 对所有继承该类或在该程序集内声明的类可访问

    public 对任何类可访问

    8、抽象成员

    用abstract修饰符标记,方法、属性、事件、索引均可以抽象。抽象成员没有实现体,被分号取代。而且必须被覆写。

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

    ②就像虚成员,派生类中抽象成员的实现必须指定override修饰符。

    9、抽象类

    抽象类只能用作其它类的基类不能实例化。用abstract声明。

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

    10、密封类

    用sealed声明,必须是独立的类,不能用作基类。

    11、静态类

    静态类需要声明为static,所有成员必需是静态的,可以有静态构造函数,但没有实例构造函数,不能创建该类的实例。静态类是隐匿是密封的。

    12、扩展方法

    class MyData

    {

    private double dbD1;

    private double dbD2;

    private double dbD3;

    public MyData(double d1, double d2, double d3)

    {

    dbD1 = d1;

    dbD2 = d2;

    dbD3 = d3;

    }

    public double Sum()

    {

    return dbD1 + dbD2 + dbD3;

    }

    }

    static class ExtendMyData

    {

    public static double Average(this MyData md)

    {

    return md.Sum() / 3;

    }

    }

    则可以直接用以下方法调用:

    MyData md = new MyData(3, 4, 5);

    Console.WriteLine("Average:{0}", md.Average());

    Console.ReadKey();

    this必需作为第一参数,如果需要给 Average加参数,参考如下:

    public static double Average(this MyData md,int icount)

    {

    return md.Sum() / icount;

    }

    调用时:

    MyData md = new MyData(3, 4, 5);

    Console.WriteLine("Average:{0}", md.Average(3));

    Console.ReadKey();

  • 相关阅读:
    【Head First Servlets and JSP】笔记
    【Java Web】新手教程(转)
    【Java Web】入门资源整理
    【离散数学】网络资源整理
    【c++习题】【17/5/8】重载运算符
    【c++习题】【17/4/13】stack
    【笔记】css3实现网页平滑过渡效果...
    【Python】常用内建模块(卒)
    【Java】仿真qq尝试:用户注册(三)
    【Thinking in java, 4e】复用类
  • 原文地址:https://www.cnblogs.com/pengjia89/p/3643731.html
Copyright © 2011-2022 走看看