• 面向对象


    封装性,继承性,多态性。

    封装性

    封装:将类的内部结构隐藏起来。

    实现方法之一:访问修饰符

    public, 无限制,公有的

    protected internal,

    internal, 允许项目或内部的类来访问

    protected , 子类可以完全访问基类。

    private 只允许同一类中成员访问。(默认的访问修饰符)

    继承性

    子类可以有能力直接从基类中获得其所有代码和数据,而且还可以定义自身的成员。

    Public class lnsuranceAccount : Account 左边是子类,右边是基类

    C#中只支持单继承

    防止继承:public sealed class XX

    派生类可以调用基类的方法

    通过使用base关键字

    派生类在访问基类的时候有一定的限制,不能访问private中的成员;internal的基类成员只能被同一类中的派生类访问。

    Public class Account
    
    {
    
    Public double balane ;
    
    Public bool Withdraw(double amt)
    
    {
    
    Balance -= amt;
    
    Return true;
    
    }
    
    }
    
    Public class CheckAccount : Account
    
    {
    
    Public bool Withdraw(double amt)
    
    {
    
    If(amt <= base.balance)
    
    Return base.Withdraw(amt)
    
    Else
    
    Return false;
    
    }
    
    }
    
    //CheckAccount是子类,Account是基类。

    对象引用:

    checkAccount ca = new CheckAccount();

    Account acc = new CheckAccount(); 基类的对象指针可以实现子类的实例化

     //子类中肯定包含基类成员,而基类成员不一定包含有子类中的成员。

    Solution :数据类型转换

    Account acc = new CheckAccount()

    CheckAccount chk = acc // Error

    CheckAccount chk = (CheckAccount)acc //OK

    如果acc不是CheckAccount的对象,那么运行时就会抛出System.InvalidCastException

    何时使用继承

    1, 代码重用,减少编写的代码量

    2, 设计重用:公用的字段和方法可以放到父类中,然后由其派生新的子类,子类有自己的字段和方法。

    3, 经验而言------“is a”的关系:

    如果A类是从B类中继承而来,即A是B的子类,那么我们可以说class A is a Class B

    多态性

    在运行时,可以通过指向基类的引用,来调用实现派生类中的方法。

    //在运行时,可以通过指向基类的引用,来调用实现派生类中的方法。
    //当然,如果它们都继承自某个类,你可以把这些派生类,都放到一个数组中。
    //如果这些对象都有同名方法,就可以调用每个对象的同名方法。

    同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。

    //在面向对象的系统中,多态性是一个非常重要的概念,它允许客户对一个对象进行操作
    //,由对象来完成一系列的动作,具体实现哪个动作、如何实现由系统负责解释。

    多态性通过派生类覆写基类中的虚函数型方法来实现。

    编译时的多态性

    编译时的多态性是通过重载来实现的。

    对于非虚的成员来说,系统在编译时,根据传递的参数、返回的类型等信息决定实现何种操作。

    运行时的多态性

    运行时的多态性就是指直到系统运行时,才根据实际情况决定实现何种操作。

    C#中,运行时的多态性通过覆写虚成员实现。

    编译时的多态性为我们提供了运行速度快的特点,而运行时的多态性则带来了高度灵活和抽象的特点。

    重载(overload):类中定义的方法可能有不同的版本

    public bool Withdraw(double amt,string name)

    public double Withdraw(double amt)

    特点:方法名必须相同,参数列表必须不相同,返回值类型可以不相同

    虚拟函数:使用virtual关键字 public virtual bool withdrow(…)

    调用虚方法,运行时将确定调用对象是什么类的实例,并调用适当的覆写的方法

    虚方法可以有实现体

    覆写(override):子类中为满足自己的需要来重复定义某个方法的不同实现

    通过使用关键字override来覆写

    Public override bool Withdraw(…)

    只有虚方法和抽象方法才能被覆写

    要求:相同的方法名称,相同的参数列表,相同的返回值类型。

    clip_image002

    抽象方法:生必须被派类覆写的方法,可以看成是没有实现体的虚方法。

    如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否还包含其他一般方法

    Public abstract bool Withdraw(…)

    接口:为类提供了蓝图,只提供定义,实现接口的数据类型必须提供接口成员的实现,接口本身可以从多个基接口派生。

    使用interface关键字

    Public interface IAccount 
    
    {
    
    Void Method1();
    
    String Method2(int x, int y)
    
    }
    Public class InsuranceAccount: IAccount
    
    {
    
    Void Method1()
    
    {
    
    ….
    
    }
    
    String Method2(int x, int y )
    
    {
    
    …
    
    }
    
    }

    总结:

    1.访问限制

    2.继承和接口是互补的

    Øis-a”—— inherits

    Øacts-like”—— implements

    Ø设计中经常是两者都使用的

    3.覆写和重载

    ØOverride & Overload 的区别

    4.虚方法和抽象方法区别

    其他参考资源

    1.Webcast:

    §http://www.microsoft.com/china/msdn/events/webcasts/shared/Webcast/MSDNWebCast.aspx

    2.Resources:

    §MSDN Library http://www.microsoft.com/china/MSDN/library/default.mspx

    §GotDotNet

    http://www.gotdotnet.com

    MSDN flash:

    §http://www.microsoft.com/china/newsletter/case/MSDN.asp

    clip_bullet001[12]

  • 相关阅读:
    物联网数据卡系统源码——物联网的主要应用领域
    一张图看懂开源许可协议,开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别
    memcached对key和value的限制 memcached的key最大长度和Value最大长度
    缓存技术PK:选择Memcached还是Redis?
    .Net开源框架列表
    项目管理工具Redmine各功能测试
    DBImport V3.7版本发布及软件稳定性(自动退出问题)解决过程分享
    ASP.NET Core 折腾笔记一
    发布:.NET开发人员必备的可视化调试工具(你值的拥有)
    开源发布:VS代码段快捷方式及可视化调试快速部署工具
  • 原文地址:https://www.cnblogs.com/HuXiaoxia/p/3399721.html
Copyright © 2020-2023  润新知