• 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();

  • 相关阅读:
    Java实现 LeetCode 394 字符串解码
    Java实现 LeetCode 394 字符串解码
    Java实现 LeetCode 392 判断子序列
    Java实现 LeetCode 392 判断子序列
    Java实现 LeetCode 392 判断子序列
    Java实现 LeetCode 391 完美矩形
    Java实现 LeetCode 391 完美矩形
    Java实现 LeetCode 391 完美矩形
    Java实现 LeetCode 390 消除游戏
    Java实现 LeetCode 390 消除游戏
  • 原文地址:https://www.cnblogs.com/pengjia89/p/3643731.html
Copyright © 2020-2023  润新知