一步一步学习C#(四 继承)
1.类的继承
1.启动vs,建立一个简单的winform窗口,输入一个按钮,在按钮事件中写入代码:MessageBox.Show("you clicked me!");
2、我们再建立一个Form窗口,我们选择“继承的窗体”,再次选择刚刚建立的Form1。
3、这样在新建立的Form2窗口中也有一个按钮了(这个按钮就是继承了Form1窗口而来,而且删除不掉)。
4、我们修改入口方法main(),修改代码如下: 将原来的Application.Run(new Form1());修改为为Application.Run(new Form2());
5、运行效果一样,但是实际上运行的是一个继承的窗体。
列子:
1 Public class a
2 {}
3 Public class b:a
4 {}
2.接口的继承
(1)接口类似于一个模板,它定义了一种签名方式,什么是签名?
1 public interface tank_action
2 {
3 void fire();
4 void go();
5 }
6 class tank1:tank_action
7 {
8 public void fire()
9 {
10 Console.WriteLine("tank1 is now firing!");
11 }
12 public void go()
13 {
14 Console.WriteLine("tank1 is now going!");
15 }
16 }
17
18 调用:
19 tank1 aa = new tank1();
20 aa.fire();
21 aa.go();
22 Console.ReadLine();
注意:
1 一个类只能有唯一的一个父类,而不能同时继承多个
2 例如:
3 public class a
4 {
5 }
6 public class b
7 {
8 }
9 public class c : a,b
10 {
11 }
12
1 隐藏方法例子:
2 class class1
3 {
4 public void class1_method1()
5 {
6 Console.WriteLine("aa");
7 }
8 }
9 class class2:class1
10 {
11 public void class1_method1()
12 {
13 Console.WriteLine("bb");
14 }
15 }
16 调用:
17 class2 testclass =
18 new class2();
19 testclass.class1_method1();
20 Console.ReadLine();
4.调用函数的基类
调用基类例子:
class CustomerAccount
{
public virtual decimal CalculatePrice()
{
return 1M;
}
}
class GoldAccount : CustomerAccount
{
public override decimal CalculatePrice()
{
return base.CalculatePrice() * 0.9M;
}
}
调用:
GoldAccount test = new GoldAccount(); Console.WriteLine(test.CalculatePrice()); Console.ReadLine();
1 抽象类和抽象方法例子:
2 abstract class Building
3 {
4 public abstract decimal Calculate(); // abstract method
5 }
6 class newBuilding : Building
7 {
8 public override decimal Calculate ()
9 {
10 Console.WriteLine("aa");
11 return 2.2M;
12 }
13 }
14
15 调用:
16 newBuilding test = new newBuilding();
17 Console.WriteLine(test.Calculate ());
18 Console.ReadLine();
19
20
21
1 密封类和密封方法例子:
2 sealed class FinalClass
3 {
4 //不能定义为虚方法,,因为本身这个类都是不需要继承的,那么定义为虚方法的意义就不大了
5 //public virtual void cal()
6 // {
7 // Console.WriteLine("cc");
8 // }
9
10 public void cal()
11 {
12 Console.WriteLine("cc");
13 }
14 public static void StaCal()
15 {
16 Console.WriteLine("bb");
17 }
18 }
19 //密封类是不能继承的
20 //class DerivedClass : FinalClass
21 //{
22 //public override void cal()
23 //{
24 // Console.WriteLine("bb");
25 //}
26 //}
27
28
在子类中覆盖父类方法:
1 public class aa
2 {
3 public void one()
4 {
5 Console.WriteLine("aa");
6 }
7 }
8 public class bb : aa
9 {
10 new public void one()
11 {
12 base.one();
13 Console.WriteLine("bb");
14 }
15 }
16
7.类的修饰符