上回介绍了关于第一章所设计的那些知识点,这次介绍一下第二章所涉及到的代码,以及由代码折射出的知识点!
<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:24px;">//第二章,声明属性的修饰符,以及调用另一个类的属性和方法 namespace ConsoleApplication1 { class Program { static void Main(string[] args) { //创建类中的一个对象 BankCustomer c; //实例化 c = new BankCustomer(); //调用并赋值 c.FirstName = "kang"; c.LastName = "ma"; c.Balance = 0.0M; c.Deposit(1000.00M); } } public class BankCustomer { //定义属性 public string FirstName; public string LastName; public decimal Balance; //定义方法 public void Deposit(decimal amount) { this.Balance += amount; } } }</span></span>
这个例子主要讲了如何在一个类中调用另一个类的属性和方法,其中另一个类属性和方法的声明必须是public(公有),如果定义为private(私有)是无法调用的。
<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:24px;">//问题 第二章 面向对象第二小节 Authentic运用 namespace Authentic1 { public class TESTMain { public static void Main() { Authentic simon = new Authentic(); bool Done; Done = simon.ChangePassword("马 康", "makang"); if (Done == true) Console.WriteLine("password ok"); else Console.WriteLine("错误"); } } class Authentic { //定义私有 密码 public string Password = "马康"; //定义boll类型的密码属性 public bool IsPasswordCorrect(string userPassWord) { return (Password == userPassWord) ? true : false; } public bool ChangePassword(string oldPassword, string newPassword) { if (oldPassword == Password) { Password = newPassword; return true; } else return false; } } }</span></span>
一开始我只写了一个Authentic类,并且一直在这个类中加Main方法,怎么也运行不出来,这次再看这些遗留的问题的时候发现原来需要在另一个类中调用Authentic类的方法以及判断,这也就能很好的说明,我第二次看的时候比第一次看有收获了!
从以上例子中关于Authentic的运用很明显了,就是用来做判断用的,记得设计模式中会将这些判断都分成每一类中单独的判断,也就是降低代码之间的耦合度了!
<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:24px;">//第二章面向对象,static静态构造函数 可以用this或者base调用基类的构造函数 namespace Bus { public class Bus { //Static constructor: static Bus() { System.Console.WriteLine("这是一个静态构造函数Bus方法"); } public static void Drive() { System.Console.WriteLine("这是一个Drive方法."); } } class TestBus { static void Main() { Bus.Drive(); } } } //最后结果将自动调用Bus类中的Bus方法(自动调用)!</span></span>
这个例子主要介绍了一下静态构造函数的使用,看着视频中介绍它的定义,总结一下就是:
1.方法名和类名相同(以上的Bus类名和Bus方法名)。
2.调用改类中的方法的时候,它就会被优先调用。
3.不显示调用方法,无法访问返回值(构造函数不返回值)。
4.构造函数可以用this和base调用和重写。
<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:24px;">//问题第二章,面向对象,方法重写 namespace Basederived { class Base { public virtual void base1() { Console.WriteLine("此方法显示定义方法"); } } class Derived : Base { //重写base类中的base1方法 public override void base1() { base.base1(); Console.WriteLine("此方法重写base方法"); } public static void Main() { Base a = new Derived(); a.base1(); } } }</span></span>
通过这个例子对于方法的重写有些理解了,需要注意的是:
1.方法重写必须匹配基类中方法的返回值类型和参数,否则就会产生一个编译错误。
<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:24px;">//第二章,面向对象,abstract关键字 namespace abstract1 { abstract class ShapesClass { abstract public int Area(); } class Square : ShapesClass { int x, y; //Not providing an Area method results //in a compile-time error. public override int Area() { return x * y; } } }</span></span>
以上例子介绍了abstract关键字,若以此关键字修饰的类,证明此类只能是其他类的基类!将范围缩小,减少耦合度!
<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:24px;">//第二章面向对象,向上转型 namespace consoleApplication1 { class program { static void Main(string[] arge) { Derive.Test2(); } } public class Bass { public void Test() { Console.WriteLine("我是基类"); } } public class Derive : Bass { public static void Test2() { Bass b = new Derive(); b.Test(); } } }</span></span>
这个向上转型例子,将派生类当作基类来使用。
<span style="font-family:KaiTi_GB2312;font-size:18px;"><span style="font-family:KaiTi_GB2312;font-size:24px;">//第二章 面向对象 播放器 多态 namespace bofang { class program { static void Main(string[] arge) { //DVD dvd = new DVD(); //Console.WriteLine(dvd.PlayVideo()); //VCD vcd = new VCD(); //Console.WriteLine(vcd.PlayVideo()); //调用playvideo()方法 program tt = new program(); tt.PlayVideo(); } public void PlayVideo() { VideoShow vw; vw = new DVD(); Console.WriteLine(vw.PlayVideo()); vw = new VCD(); Console.WriteLine(vw.PlayVideo()); } } //定义一个播放类 public abstract class VideoShow { public abstract string PlayVideo(); } //继承播放类 public class VCD : VideoShow { public override string PlayVideo() { return "正在播放VCD"; } } //继承播放类 public class DVD : VideoShow { public override string PlayVideo() { return "正在播放DVD"; } } }</span></span>
这个例子介绍了面向对象中多态的运用!
通过上面的例子,一步步的深入,让我对于面向对象技术的基础了解更加透彻,对于代码的解读理解性更加敏感,在看完第一遍设计模式书,现在看这些代码情切多了,尤其是越往后的例子!以前遗留的问题也都基本解决了,其中的快感,真是无法形容啊!