.NET第一章

访问修饰符的开放性从高到低排序及说明:
Public:开放性最大,不管是否同一个程序集或者不管是否继承,都可被访问。
Protected Internal:不论是否为同一程序集,是否为继承关系,均可以被访问。
Protected:只要继承了该类,则其对象就有访问父类的权限,而不管这两个具有继承关系的泪是否在同一个程序集中。
Internal:只要是隶属于同一程序集,对象即可访问其属性,而不管是否存在隶属关系,即继承关系。
Private:最低的访问权限,只能访问自己。

 
继承:
继承的类称为子类、派生类;子类可以通过加入新的属性和方法或者修改父类的属性和方法简历新的类层次。
被继承的类称为父类、基类、超类。

 
.NET中继承方式分为:
实现继承:派生类继承基类的所有属性和方法,并且只能有一个基类,System.Object是所有类型的最终基类。
接口继承:允许多继承,同事派生类只继承方法签名而没有方法实现,具体的实现必须在派生类中完成。

 
继承的本质:
继承是可传递的,子类是对父类的扩展,必须继承父类的方法,同时可以添加新方法。
子类可以调用父类方法和字段,而父类不能调用子类方法和字段。
子类不光继承父类的公有成员,同时继承了父类的私有成员,只是在子类中不被访问。
new关键字在虚方法继承中起阻断作用。
实现继承与接口继承在规则上的不同:
实现继承表现为对抽象类的继承,适用于有族层概念的类间关系;接口继承适合为不同的类提供通用功能。
接口着重于CAN-DO关系类型;抽象类偏重于IS-A式的关系。
接口定义对象的行为;抽象类定义对象的属性。
预计会出现版本问题时,可创建“抽象类”;接口继承中,若向接口中添加新成员则会强制要求修改所有派生类,并重新编译。
因为值类型是密封的,所以只能实现接口,而不能继承类。


继承、聚合、依赖区别:
继承关系的耦合度较高;
聚合分为三种类型:依次为无聚合、共享、复合,其耦合度逐级递增。
无聚合:类的双方彼此不受影响;
共享:父类无需对子类负责;
复合:子类受控于父类的更改。
聚合关系为HAS-A关系,耦合度没有继承关系高。
依赖关系:如果父类被修改,则子类会受到影响。


Adapter模式:
类的Adapter模式:通过引入新的类型来继承原有类型,同时实现新加入的接口方法。图1-7
对象的Adapter模式:通过聚合而非继承的方式来实现对原有系统的扩展。即直接对父类对象进行聚合操作,然后加入新的接口方法。图1-9


字段、属性、方法:
字段:通常定义为private,表示类的状态信息。大部分情况下字段是可读可写的,只读字段只能在构造函数中被赋值。

public static void RunSnippet() 
{ 
  Client xiaowang=new Client; //实例化 
  xiaowang.name="XiaoWang"; 
  xiaowang.age=24; 
  xiaowang.password="123456"; 
} 

     ///  
     /// 用户类 
     ///  
public class Client 
  { 
   private string name;  //用户姓名 
   private int age;  //用户年龄 
   private string password;  //用户密码 
  } 

属性:通常定义为public,表示类的对外成员。通过get、set来实现读写控制。属性为只读,则只使用get;若为只写,则只使用set。

    ///  
    /// 用户类 
    ///  
    public class Client 
    { 
        private string name;         //用户姓名 
        public string Name 
        { 
            get { return name; } 
            set 
            { 
                name = value == null ? String.Empty : value; 
            } 
        } 
         
        private int age;                //用户年龄 
        public int Age 
        { 
            get { return age; } 
            set 
            { 
                if ((value > 0) && (value < 150)) 
                { 
                    age = value; 
                } 
                else 
                { 
                    throw new ArgumentOutOfRangeException("年龄信息不正确。"); 
                } 
            } 
        } 
        private string password;  //用户密码 
        public string Password 
        { 
            get { return password; } 
            set 
            { 
                if (value.Length < 6) 
                    password = value; 
            } 
        } 

方法:通常为public,封装了类的行为,用于将封装的内部细节以公有方法提供对外接口,从而实现与外部的交互与响应。 
通常将内部的操作全部以private方式来实现,而将需要与外部交互的方法实现为public。

公共的基类是不可以实例化的,可以用抽象类abstract实现比较好。

多态:基类继承式多态和接口实现式多态。


动态绑定:一般以继承和虚方法来实现。虚方法以virtual或者abstract来标记,在子类中覆写的虚方法用override标记。


接口: .NET中很多的接口都以able为命名后缀,意指能够为空、能够克隆、能够枚举、能够对比。接口是实现抽象机制的重要手段,通过接口实现可以弥补继承和多态在纵向关系上的不足,具体可参考多态部分。
接口的本质:接口被创建后,本质上可以看做是一个定义了抽象方法的类,该类仅提供了方法的定义,而没有方法的实现,其功能由接口的实现类来完成。本质上,接口仍旧是一个不能实例化的类,但是又区别于一般的类,因为接口无法实例化、允许多继承,可以作用于值类型等。


接口的规则:
接口应该被实现为具有单一功能的小接口,而不要实现为具有多个功能的胖接口,类对于类的依赖应建立在最小的接口之上。
接口支持多继承,既可以作用于值类型,也可以作用于引用类型。
接口不能被实例化,没有构造函数,接口成员被隐式声明为public。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值