• C# 继承(3)持续更新


    类继承 和 接口继承

    类继承        一个类型派生于一个基类行,它拥有该基类型的所有成员字段和函数。

    接口继承     一个类型继承函数的签名,不需要实现代码。 

    多重继承

    一个类派生自多个类。多重继承编写非常复杂,难维护。因此C# 不支持多重继承。但可以 派生自多个接口,多重接口继承。

    结构和类

    结构(值类型) 和 类(引用类型)。使用结构的一个限制是结构不支持继承,每个结构自动派生自System.ValueType。结构不能实现类型继承,但是实现接口继承。

    • 结构总是派生自 System.ValueType ,它们可以派生自任意多个接口。
    • 类总派生自 Syste.Object 或 用户选择的另一个类,它们还可以派生自任意多个接口。

    实现继承

    public class Money : MyBaseClass
    {
    
    }

    C++ 支持 公共继承、私有继承的概念,要注意C#不支持私有继承。因此类名上没有 public 和 private 限定符,私有继承只会增加复杂性,所以C++也使用的非常少。

    派生 类 和 接口

    public class Money : MyBaseClass, IInterface1, IInterFace2
    {
    
    }

    结构

    public struct Money : IInterface1, IInterFace2
    {
    
    }

    虚方法

    C# 虚函数的概念与标准 OOP 的概念形同:可以在派生类中重写虚函数。除了构造函数以外,可以显式的声明 virtual 。而在Java中,所有的函数都虚函数。

    public class MyBaseClass
    {
        public virtual void VirtualMethod()
        {
            
        }
    }
    
    public class Money : MyBaseClass
    {
        public override void VirtualMethod()
        {
            base.VirtualMethod();
        }
    }

    成员字段和静态函数都不能声明为virtual。

    隐藏方法

    签名相同的方法在基类和派生类中进行声明,但该方法没有分别声明为 virtual 和 override。派生类方法就会隐藏基类方法。使用new关键来隐藏方法。

    public class MyBaseClass
    {
        public new void VirtualMethod()
        {
            
        }
    }
    
    public class Money : MyBaseClass
    {
        public void VirtualMethod()
        {
           
        }
    }

    调用基类方法

    base.VirtualMethod();

    抽象类 和 抽象函数

    C# 允许把类 和 函数 声明 为 abstract。 抽象类不能实例化,而抽象函数不能直接实现,必须在非抽象的派生类中重写。抽象函数本身就是虚拟的,所以不能加 virtual 关键字。

    C++中 抽象函数 称为 纯虚函数 。C# 称为 抽象函数。

    abstract public class MyBaseClass
    {
        public abstract void VirtualMethod();
    }
    
    public class Money : MyBaseClass
    {
        public override void VirtualMethod()
        {
           
        }
    }

    密封类和密封方法

    sealed  

    • 类 表示不能继承该类  
    • 方法  表示不能重写该方法
    sealed public class MyBaseClass
    {
        public void VirtualMethod()
        {
            
        }
    }

    string就是一个密封类。 sealed 也可以用在 重写函数 。防止别人重写函数。

    派生类的构造函数

    构造函数的执行顺序是由上向下进行,最先调用的总是基类的构造函数。

    在层次结构中添加无参数的构造函数

    public abstract class MyBaseClass
    {
        private string name;
        public MyBaseClass() : base()
        {
            name = "<no name>";
        }
    }

    带参数的构造函数 

    public abstract class MyBaseClass
    {
        private string name;
        public MyBaseClass(string name)
        {
            this.name = name;
        }
    }
    
    public class Money : MyBaseClass
    {
        public Money(string name) : base(name)
        {
            
        }
    }

    其他修饰符 

    extern 调用外部 dll 时,使用。

    [DllImport("avifil32.dll")]
    private static extern void AVIFileInit();

    介绍

    http://blog.csdn.net/llddyy123wq/article/details/5620466

    接口

    public interface IDisposable
    {
        void Dispose();
    }

    声明接口在语法上与声明抽象类相同,也不允许包含运算符重载,不能有构造函数,不能实现任何成员的实现方式。

    派生接口类

    public interface IDisposable
    {
        void Dispose();
    }
    
    class MyClass : IDisposable
    {
        public void Dispose()
        {
            
        }
    }

    接口名称通常以字母I开头,接口应用强大的之处在于,它可以引用任何实现该接口的类。

    接口派生接口

    public interface IBankAccount
    {
        void PayIn(decimal amount);
        bool Withdraw(decimal amount);
        decimal Balance { get; }
    }
    
    public interface ITransferBankAccount : IBankAccount
    {
        bool TransferTo(IBankAccount distination, decimal amount);
    }
    
    public class CurrentAccount : ITransferBankAccount
    {
        public void PayIn(decimal amount)
        {
            
        }
    
        public bool Withdraw(decimal amount)
        {
           
        }
    
        public decimal Balance { get; }
    
        public bool TransferTo(IBankAccount distination, decimal amount)
        {
            
        }
    }
  • 相关阅读:
    golang学习笔记---flag包
    golang学习笔记 --- 结构体(struct)
    golang学习笔记---映射(map)
    golang学习笔记----slice(22)
    golang学习笔记---数组(22)
    golang学习笔记 ---数据类型转换(strconv包)
    golang学习笔记 ---slice(2)
    golang学习笔记 ---slice
    golang学习笔记--中英文字符串截取
    golang学习笔记 ---如何将interface转为int, string, slice, struct等类型
  • 原文地址:https://www.cnblogs.com/z888/p/5773876.html
Copyright © 2020-2023  润新知