有关C#抽象类

1.有关今天使用到工厂模式的的时候,用到抽象类和抽象函数,在用子类继承的时候,出现的很多错误,无数次在内心里骂了n次fuck!!!!

好吧 ,我是新人,我要沉住气,好好学习,不管啦,和大家分享一下今天学到一些很关键的知识。

大学里教的东西很少设计工厂模式,那今天师傅让我用工厂设计模式作一个项目的时候,哇塞,捉襟见肘,以前也只是那么随意一看,没有运用的到实际中,现在要用的时候感觉真捉急。

好在有个好师傅,循序渐进讲述简单工厂模式和工厂模式的区别之类的,现在理解了之后其实也就是针对一个原则的区别:关闭-开放原则,在构造软件的过程中,对扩张开放,但是对修改封闭。工厂模式虽然代码显得多,但很明显做到这点。简单工程模式,一旦要添加一个子类的时候,就要去人工手动的修改工厂类里面的函数。但是在工厂模式里面,我们只需要再添加一个工厂就好了。

说穿了,其实工厂模式是基于简单工厂模式的。

上传的简单的计算器就是用工厂模式做的,相对比较简单。我不和大家分析很多了,网上有很多分析的很好的,我这边也有工厂模式的代码。

言归正传,有关子类和父类,我觉得今天收益非浅

就是为什么有子类和父类的存在,为什么会有抽象这个概念,我觉得是因为很多事物之间都有共同点的原因。

大学三年,其实用的不多,也没能深刻体会到。

2.在抽象类里面有很多抽象函数,这些函数为什么抽象而不实例化直接调用呢?这是因为每个事物都有自己的类似的动作,但是又不相同。对于相似而又不相同的操作我们用抽象函数会方便很多很多。。。。

蓝后将到抽象函数了,就引入两个关键字:abstract和virtual

额,其实我主要用的是abstract,在父类里声明抽象函数,抽象函数是没有方法体的,蓝后在子类里面重写(override),而且只要在抽象类里面定义成抽象函数的,在子类里面的一定要重写!!!

蓝后虚函数是有代码的并明确允许子类去覆盖,但子类也可不覆盖,就是说可以直接用,不用重写。用的有点不习惯啊。。。。

3.蓝后偶就脑子抽筋的想到一个问题,如果在父类里面有一个函数,不是抽象函数也不是虚函数,那么你觉得如果在子类里面重写父类的这个方法呢?这个时候我们就用到new关键字,默认隐藏父类的同名函数,好的,俺还没来的及做实验,。。。。。要12点了,不行,俺得睡觉啦!!!晚安,各位IT界的同胞们。。。。。。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C# 中,抽象类是一种不能被实例化的类,通常用于作为其他类的基类。抽象类可以包含抽象方法、虚方法、静态方法、字段、属性、构造函数等成员。 以下是如何使用抽象类的示例步骤: 1. 定义抽象类 首先,您需要定义一个抽象类抽象类使用 `abstract` 关键字进行定义。例如: ```csharp public abstract class MyAbstractClass { public abstract void MyAbstractMethod(); public virtual void MyVirtualMethod() { Console.WriteLine("MyVirtualMethod called."); } } ``` 在这个例子中,`MyAbstractClass` 类是一个抽象类,并且包含一个抽象方法 `MyAbstractMethod()` 和一个虚方法 `MyVirtualMethod()`。 2. 继承抽象类 接下来,您需要创建一个类,该类从抽象类继承。这意味着该类需要提供抽象类中定义的所有抽象方法的实现。例如: ```csharp public class MyClass : MyAbstractClass { public override void MyAbstractMethod() { Console.WriteLine("MyAbstractMethod called."); } public override void MyVirtualMethod() { Console.WriteLine("MyVirtualMethod overridden."); } } ``` 在这个例子中,`MyClass` 类从 `MyAbstractClass` 抽象类继承,并且提供了 `MyAbstractMethod()` 和 `MyVirtualMethod()` 方法的实现。 3. 创建对象 接下来,您需要创建一个类的对象,该类从抽象类继承。例如: ```csharp MyClass myObj = new MyClass(); ``` 4. 调用方法 最后,您可以使用对象调用 `MyAbstractMethod()` 和 `MyVirtualMethod()` 方法。例如: ```csharp myObj.MyAbstractMethod(); myObj.MyVirtualMethod(); ``` 这将调用 `MyClass` 类中实现的 `MyAbstractMethod()` 和 `MyVirtualMethod()` 方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值