【设计模式】基础知识验收

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/horizon_junmowen/article/details/81513619

属性 & 方法

属性-一个人的特征
方法-一个人的动作行为
这里写图片描述

修饰符

修饰符 解释
private 私有成员,在类的内部才可以访问
public 公共成员,完全公开,没有访问限制
internal 当前程序集内可以访问
protected 保护成员,该类内部和继承类中可以访问

抽象类 & 具体类 & 接口

抽象类通常代表一个抽象概念,它提供一个继承的出发点,当设计一个新的抽象类时,一定是用来继承的,所以,在一个以继承关系形成的等级结构里面,树叶节点应当是具体类,而树枝节点均应当是抽象类。

抽象类与抽象方法由abstract修饰,当使用abstract修饰类时,表明这个类只能被继承;当使用abstract修饰方法时,表明这个方法必须由子类提供实现。

一个接口表示:“所有实现了该特定接口的类看起来都像这样”!!!!因此任何使用某特定接口的代码都知道可以调用接口的那些方法。而且仅需知道这些。因此,接口被用来建立类与类之间的协议。
详情参考:https://blog.csdn.net/u010582345/article/details/78398838

重载 & 重写

override(重写)

重写:不同对象对同一个方法调用的不同行为(指不同的对象收到相同消息时,会产生不同的行为)

   1、方法名、参数、返回值相同。
   2、子类方法不能缩小父类方法的访问权限。
   3、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。
   4、存在于父类和子类之间。
   5、方法被定义为final不能被重写。

 overload(重载)

方法重载是让类以统一的方式处理不同类型数据的一种手段。
多个同名函数同时存在,具有不同的参数个数/类型。
重载Overloading是一个类中多态性的一种表现。

  1、参数类型、个数、顺序至少有一个不相同。
  2、不能重载只有返回值不同的方法名。
  3、存在于父类和子类、同类中。
详情参考: https://blog.csdn.net/linzhaojie525/article/details/55213010

is & has

“Is—A”是指一个类是另一个类的“一种”,是属于的关系,而“Has—A”则不同,它表示某一个角色具有某一项责任。导致错误的使用继承而不是聚合的常见的原因是错误地把“Has—A”当成“Is—A”.
这里写图片描述
实际上,雇员、经历、学生描述的是一种角色,比如一个人是“经理”必然是“雇员”。在上面的设计中,一个人无法同时拥有多个角色,是“雇员”就不能再是“学生”了,这显然不合理,因为现在很多在职研究生,即使雇员也是学生。

上面的设计的错误源于把“角色”的等级结构与“人”的等级结构混淆起来了,误把“Has—A”当作”Is—A”。具体的解决方法就是抽象出一个角色类:
这里写图片描述
区分好”Has—A”和“Is—A”的关系了,我们就能很好的使用合成复用原则。

泛型

泛型是具有占位符的类、结构、接口和方法,这些占位符是类、结构、接口和方法所存储或使用的一个或多个类型的占位符。

List< T >——在尖括号中写什么类型,这个集合就变成什么类型的集合

namespace _02泛型集合
{
    class Program
    {
        static void Main(string[] args)
        {
            List<int> list = new List<int>();

            //随机的往这个list集合中添加十个数字,不能重复,求和,求最大值最小值平均值
            Random r = new Random();
            int num = 0;
            while (list.Count!=10)
            {
                num = r.Next(1, 100);
                if (!list.Contains (num))
                {
                    list.Add(num);
                }
            }
            Console.WriteLine("最大值{0}",list.Max ());
            Console.WriteLine("最小值{0}",list.Min() );
            Console.WriteLine("和为{0}",list .Sum ());
            Console.WriteLine("平均值为{0}",list .Average ());
            Console.ReadKey();
        }
    }
}

深复制 & 浅复制

浅复制——被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用都仍然指向原来的对象。

深复制——把引用对象的变量指向复制过的新对象,而不是原有的被引用的对象。例如abc三个引用对象都是不同的,复制时一变二,二变三,这种方式就是深复制。

猜你喜欢

转载自blog.csdn.net/horizon_junmowen/article/details/81513619