![](https://img-blog.csdnimg.cn/20190918135101160.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C#面向对象编程
文章平均质量分 70
黄海几吹夏
这个作者很懒,什么都没留下…
展开
-
1.4.1 面向对象 1.4.2 继承的类型
面向对象的三个重要的概念是继承、封装、多态继承的类型单重继承:一个类可以可以派生自一个基类。多重继承:一个类派生自多个基类。因为多重继承会产生复杂的代码,并产生很多多余的开销,C#不采用这种方式。多层继承:A类继承与B类,B类有继承于C类,这中继承的方式就属于多层继承。接口继承:一个类可以继承定义好的接口类,接口继承支持多重继承,这种方式C#是支持的。结构是值类型,所以编码...原创 2019-08-03 22:33:19 · 111 阅读 · 0 评论 -
1.4.4.1 定义和实现接口
我们用一个例子来说明接口的定义和实现我们使用银行账户系统来定义和实现接口。这个银行账户系统有很多的银行账户,他们彼此之间可以对账户进行存取款,查询余额。因此我们需要定义一个接口,用来识别不同的账户的不同操作。开始把,首先定义一个接口 public interface IBankAccount { void PayIn(decimal amount);...原创 2019-08-14 11:26:38 · 168 阅读 · 0 评论 -
1.4.4修饰符
C#中的修饰符很多,那么我们现在花点时间总结一下。C#修饰符 修饰符 可以之处 描述 public 公有访问 不受任何限制。 protected 保护访问 只限于本类和子类访问,实例不能访问。 internal 内部访问 只限于本项目内访问,其他不能访问。 private 私有访问 只限于本类成员访问。子类,实例都不...原创 2019-08-07 11:23:06 · 112 阅读 · 0 评论 -
1.4.3.7 派生类的构造方法
根据https://blog.csdn.net/img_Guo/article/details/81712813改写。(加入自己见解使其更易懂)一、派生类的构造方法的执行顺序派生类的构造方法分为两类:静态构造方法和实例构造方法 两种构造方法的执行顺序是不同的,静态类的构造方法是从对象实例化开始,从要实例化的类开始向上依次寻找基类,依次执行。而实例构造方法是在静态构造方法之后从最顶层的...原创 2019-08-07 10:15:18 · 295 阅读 · 0 评论 -
1.4.3.6 封闭类和封闭方法(sealed)
因为所有的类都可以被继承,为了防止类的继承被滥用,C#中提出了密封类的概念。如果想声明一个类,并且该类不能被其他类所继承。那么使用sealed关键字可以将类和方法封闭起来,使类不能被继承,方法不能被重写。sealed class FinalClass{}密封类不可以被继承,但是可以继承其他类。由于密封类的不可继承性,因此密封类不能声明为抽象的,即sealed修饰符不能与abst...原创 2019-08-05 16:02:52 · 411 阅读 · 0 评论 -
1.4.3.5 抽象类和抽象方法
C#可以将类和方法声明为抽象类和抽象方法。抽象类不能实例化,而且抽象类没有实现(没有方法体),所以必须在派生类中重写。抽象方法是自动使用Virtual关键字,即使我们不提供Virtual关键字,编译器依然不会报错。抽象放发的声明必须在抽象类中。也就是说你想声明一个抽象方法,那么就必须将方法所在的类改为抽象类。我们来声明一个抽象类,然后声明一个抽象方法。public abstract ...原创 2019-08-05 14:46:02 · 110 阅读 · 0 评论 -
1.4.3.4 调用基类中的方法
C#对于调用基类中的方法有着自己独特的语句:base.FunctionName。举个例子:创建一个基类,在基类中声明一个虚方法Move。再创建一个类继承这个基类,在子类中重写父类的虚方法,方法中调用基类的Move方法。public class Shape{public virtual void Move(Position newPosition){Position.X = newPos...原创 2019-08-05 14:01:15 · 754 阅读 · 0 评论 -
1.4.3.3 隐藏方法
如果签名(参数个数、参数类型、返回类型、方法名)相同的方法在基类中和在基类的派生类中同时出现。但是这个方法在基类中没有virtual关键字,在派生类中没有override关键字,那么派生类就会隐藏基类中的方法。举个例子: public class Postion { public int X { get; set; } public int Y { ...原创 2019-08-04 22:33:12 · 149 阅读 · 0 评论 -
1.4.3.2 多态性
首先我们来看一下多态性的定义:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。换句话说,实际上就是同一个类型的实例调用"相同"的方法,产生的结果是不同的。当我们声明一个静态方法ublic static void DrawShap(Shape shape) => shape.Draw();参数时Shap,调用的方法也是Shap中的方法。当我们调用的...原创 2019-08-04 21:44:08 · 78 阅读 · 0 评论 -
1.4.3.1 虚方法
声明一个虚方法需要用到Virtual 关键字,声明虚方法后,就可以在任何派生类中重写该方法 public class Shape { public virtual void Draw() => Console.WriteLine($"Shape with Positio and Size "); ...原创 2019-08-04 21:21:02 · 119 阅读 · 0 评论 -
1.4.3. 实现继承
实现类的继承,首先声明一个基类 public class Shape { }在声明一个子类 public class Size { }实现继承 public class Size:Shape { ...原创 2019-08-03 23:04:21 · 70 阅读 · 0 评论 -
1.4.4.2 as 和 is 操作符
前一章,我们讨论了如何定义一个接口,并有多个类去实现它。那么我们要明白实现接口的类可以直接赋值给接口对象。IBankAccount venusAccount = new SaverAccount();那么这时候我们就会碰到一个问题,在我们定义一个方法的时候传入的是Object类型,而不是实现接口的类型,那我们如何将这个类赋值给接口类型呢? public stati...原创 2019-08-22 14:16:35 · 84 阅读 · 0 评论