C#学习(二)——《大话模式设计》附录A

news/2024/7/3 9:32:09 标签: 抽象类, 设计模式, 多态, c#

一、类与实例
一切事物皆为对象,即所有的东西都是对象。
对象是一个自包含的实体,用一组可识别的特性和行为来标识。

 private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show("喵");
        }
``

在这里插入图片描述


```csharp
 private void button1_Click(object sender, EventArgs e)
        {
            MessageBox.Show(shout());
            string shout()      //猫叫的方法(函数)
            {
                return "喵";
            }
        }

类就是具有相同的属性或者功能的对象的抽象的集合。

 class Cat  //Class是表示定义类的关键字,cat是类的名称
        {
            public string Shout()  //方法
            {
                return "喵";
            }
        }

1.类名称的首字母要大写,2.对外公开的方法都要用public修饰符

实例,就是一个真实的对象。
实例化,就是创建对象的过程,使用new关键字来创建。

 private void button1_Click(object sender, EventArgs e)
        {
            Cat cat = new Cat(); //将cat实例化
            //Cat cat;声明一个Cat的对象,对象名为cat
            //cat = new Cat();将此cat实例化
            
            MessageBox.Show(cat.Shout());
        }

二、构造方法
构造方法,又叫做构造函数,其实就是对类进行初始化。构造方法与类同名,无返回值,也不需要void,在new时候调用。在类创建时,就是调用构造方法的时候。New 后的 Cat()其实就是构造方法。
所有的类都有构造方法,如果不编码则系统默认生成空的构造方法,如果有定义的构造方法,那么默认的构造方法失效。

class Cat
        {
            private string name = "";
            public Cat(string name)
            //定义Cat类的构造方法,参数为字符串
            {
                this.name = name;
                //将参数赋值给私有变量name
            }
            public string Shout()
            {
                return "我的名字叫做" + name + " 喵"; 
            }
        }
  private void button1_Click(object sender, EventArgs e)
        {
            Cat cat = new Cat("Tom");
            MessageBox.Show(cat.Shout());
        }

在这里插入图片描述

三、方法重载
方法重载提供了创建同名的多个方法的能力,但这些方法需要使用不同的参数类型。

方法重载时,两个方法必须方法名相同,但参数类型或个数必须有所不同,否则重载就没有意义了。

private string name = "";
            public Cat(string name)
            {
                this.name = name;
            }
            public Cat()
            {
                this.name = "无名";
            }

方法重载可以在不改变原方法的基础上,新增功能!!!!
函数可扩展的能力

四、属性与修饰符
属性是一个方法或者一对方法,但在调用它的代码来看,它是一个字段,即属性适合于以字段的方式使用方法调用的场合。

字段是储存类要满足其设计所需要的数据,字段是与类相关的变量。

private int shoutNum = 3;//ctrl+r+e
 public int ShoutNum { get => shoutNum; set => shoutNum = value; }
 //get可读,set可写;
 
            private int shoutNum = 3;
            public int ShoutNum
            {
                get
                {
                    return shoutNum;
                }
                set
                {
                    if (value <= 10)
                 		value = shoutNum;
                    else
                    	shoutNum = 10;
                }//将叫声控制在10声以内
            }

五、封装
每个对象都包含它能进行操作所需要的所有信息,这个特性叫做封装,因此对象不必依赖其他对象来完成自己的操作。

封装的好处:
1.减少耦合
2.类实现内部自由修改
3.类具有清晰的对外接口

六、继承
对象的继承代表了一种“is-a”的关系,B is A 表示B可以继承A;
继承者还可以理解为是对被继承者的特殊化,因为它除了具备被继承者的特性外,还具备自己独有的个性。
继承定义了类如何相互关联,共享特性。继承的工作关系是定义父类和子类,也叫做基类和派生类,子类继承父类的所有特性。子类不但继承父类的所有特性,还可以重新定义新的特性。
如果子类继承于父类:
1.子类拥有父类非private的属性和功能;
2。子类具有自己的属性和功能,可扩展性;
3.子类还可以以自己的形式实现父类功能(方法重写)

protected表示继承时子类可以对基类具有完全访问权。

子类从他的父类中继承的成员有方法、域、属性、事件、索引指示器,****但对于构造方法,有一些特殊,它不能被继承,只能被调用。****对于调用父类的成员可以用base关键字。

七、多态
多态表示不同的对象可以执行相同的动作,但要通过他们自己的实现代码来执行。

1.子类以父类的身份出现
2.子类工作时以自己的方式来实现
3.子类以父类的身份出现时,子类特有的属性和方法不可以使用

为了使子类的实例完全接替来自父类的类成员,父类必须将该成员声明为虚拟的。这是通过在该成员的返回类替换型之前添加virtual关键字来实现
子类可以选择使用override关键字,将父类实现替换为它自己的实现,这就是方法重写Override。

不同的对象可以执行相同的动作,但要通过他们自己的实现代码来执行。
多态的原理是当方法被调用时,无论对象是否被转换为其父类,都只有位于对象继承链最末端的方法实现会被调用。也就是说,虚方法是按照其运行时类型而非编译时类型进行动态绑定调用的。

八、重构

protected virtual string getShoutSound()
{
return “”;
}

protected override string getShoutSound()
{
return “喵”;
}

九、抽象类

C#允许把类和方法声明为abstract,即
抽象类和抽象方法

1.抽象类不能实例化
2.抽象方法是必须被子类重写的方法
3.如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否包含其他一般方法;

抽象类拥有尽可能多的共同代码,拥有尽可能少的数据

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

十、接口
接口是把隐式公共方法和属性组合起来,以封装特定功能的一个集合。一旦类实现了接口,类就可以支持接口所指定的所有属性和成员。声明接口在语法上与声明抽象类完全相同,但不允许提供接口中任何成员的执行方式。

实现接口的类就必须要实现接口中的所有方法和属性。

一个类可以支持多个接口,多个类也可以支持相同的接口。
接口的命名,前面要加一个大写的字母’I‘。


http://www.niftyadmin.cn/n/1468676.html

相关文章

sqlite 获取插入的id_php封装的sqlite操作类

sqlite在php中是默认安装的本地小型化数据库&#xff0c;类似于xml的小型数据库&#xff0c;但sqlite功能更强。sqlite.class.php文件&#xff1a;<?phpclass sqliteDB{private $sqliteResult;private $error ;private $createTable <<<TABLE/*初始化创建数据表…

数据迁移到云平台_迁移到云的论点

数据迁移到云平台It might seem laughable these days to think some people are still afraid of moving to the cloud. But the pandemic has brought to light that there are, in fact, companies that still have their doubts about this disruptive technology. It coul…

C#学习(三)——委托与事件

在面试中&#xff0c;委托与事件几乎是必问的。如果面试官和面试者互不相识&#xff0c;面试官不问委托&#xff0c;严重怀疑这家公司的技术水平&#xff0c;这个可以说是C#入门与掌握的分水岭之一&#xff0c;非常重要。对委托和事件做一个全面的整理和归纳。这里重在理解&…

在kubernetes上通过jenkins管道使用来自ecr的图像

As a DevOps engineer at Cloudify.co, I am building a new CI/CD pipeline based on Kubernetes and Jenkins. Recently I integrated Elastic Container Registry with our CI/CD based on Jenkins. In this guide, I will share the knowledge on this topic.作为Cloudify.…

springboot 2.3_Springboot极速入门攻略

Spring Boot 是 Spring 开源组织下的子项目&#xff0c;是 Spring 组件一站式处理方案&#xff0c;主要是简化了使用 Spring 的难度&#xff0c;简省了繁重的配置&#xff0c;提供了各种启动器&#xff0c;开发者能快速上手&#xff0c;在面试中也是高频考察点&#xff01;一、…

C#学习(四)——三纲注释的设置问题

C#中新建的类库添加注释时&#xff0c;应注意以下问题&#xff1a; 1、编译动态类库时命名空间要规范&#xff0c;一般不要和类同名&#xff0c;命名空间一般定义格式&#xff1a;项目名类文件名&#xff1b; 2、动态类库中&#xff0c;类、方法的注释都采用下列方式注释&…

多元回归求解 机器学习_机器学习(6) 序列最小优化算法(SMO)求解向量机(SVM)模型...

机器学习&#xff08;1&#xff09;--线性回归和多项式拟合机器学习&#xff08;2&#xff09;逻辑回归 &#xff08;数学推导及代码实现&#xff09;机器学习&#xff08;3&#xff09;softmax实现Fashion-MNIST分类机器学习&#xff08;4&#xff09;多层感知机&#xff08;M…

qt信号能与信号相连吗_别被忽悠入坑!信号贴贴上就能信号满格?对手机信号无任何改善...

手机信号差是一件非常令人烦恼的事情&#xff0c;让不少用户苦不堪言。特别是当我们处于一个特殊的地理环境&#xff0c;有急事需要处理&#xff0c;而手机信号又不好&#xff0c;那才是着急上火得不得了。既然手机信号差&#xff0c;肯定手机用户就想让手机信号变得好起来。不…