活动网站推广方案,贵州遵义企业公司网站建设,如何查看网站的关键词,晋城住房保障和城乡建设管网站本文意在巩固基础知识#xff0c;并不是对其进行深入剖析#xff0c;如若对各位高手没有什么作用#xff0c;请绕过。本文为原创文#xff0c;所有示例均是博主测试过的#xff0c;欢迎大家批评指正#xff0c;如有转载请标明出处#xff0c;谢谢。继承、封装和多态是面… 本文意在巩固基础知识并不是对其进行深入剖析如若对各位高手没有什么作用请绕过。 本文为原创文所有示例均是博主测试过的欢迎大家批评指正如有转载请标明出处谢谢。 继承、封装和多态是面向对象编程的重要特性。 其成员被继承的类叫基类也称父类继承其成员的类叫派生类也称子类。 派生类隐式获得基类的除构造函数和析构函数以外的所有成员。 派生类只能有一个直接基类所以C#并不支持多重继承但一个基类可以有多个直接派生类。 继承是可以传递的。即 如果 ClassB 派生出 ClassCClassA 派生出 ClassB则 ClassC 会继承 ClassB 和 ClassA 中声明的成员。 class A { public void Sum(int i,int j) { int sum i j; Console.WriteLine(I am A ,my sum {0},sum); } } class B : A { public void Minus(int i,int j) { int minus i - j; Console.WriteLine(I am B ,my minus {0}, minus); this.Sum(3, 4); } } class InheritanceTest1 { static void Main(string[] args) { B b new B(); b.Minus(3, 4); Console.Read(); } } 结果I am B ,my minus-1 I am A ,my sum 7 试想一下当基类Sum方法是私有时派生类还会继承该方法吗 经过本人测试没有在B类找到该方法那么是不是它就没有被继承呢其实不是的私有成员其实已经被继承了 但是它们却不可以被访问因为私有成员只能被声明它们的类或结构体中才可访问所以看上去像是没有被继承。 如果我们想降低访问基本我们可以把基类Sum方法定义为protected。 能够阻止某个类被其他类继承吗 答案是可以的C#提供了一个sealed 修饰符此修饰符会阻止其他类从该类继承。 sealed class A { int test; public void Sum(int i,int j) { int sum i j; Console.WriteLine(I am A ,my sum {0},sum); } } class B : A { public void Minus(int i,int j) { int minus i - j; Console.WriteLine(I am B ,my minus {0}, minus); this.Sum(3, 4); //编译器会报错 } } 前面说过派生类隐式获得基类的除构造函数和析构函数以外的所有成员。 那么我们该如何获得基类的构造函数和自身的构造函数呢 我们知道基类的初始化工作由基类的构造函数完成派生类的初始化工作则有派生类的构造函数完成 但是这样就产生了派生类构造函数的执行顺序问题。 当基类没有构造函数派生类也没有构造函数时派生类新曾成员的初始化工作由其他公有函数来完成。 public class A { int test0; public void sum() { test; Console.WriteLine(I am test {0} ,test); } } class B : A { int i; public void PrintInt() { i 3; Console.WriteLine(I am i {0}, i); } } class InheritanceTest1 { static void Main(string[] args) { B b new B(); b.PrintInt(); Console.Read(); } } 结果I am i3 如果只有派生类定义构造函数时只需构造派生类对象即可。对象的基类部分使用默认构造函数来自动创建。 当基类和派生类都定义有构造函数时那么执行顺序会怎样呢 如果基类中是没有参数的构造函数那么他可以隐式的被派生类执行也就是说派生类根本不需要包含构造函数 如果基类中是没有参数的构造函数在派生类中可以自定义有参数的构造函数 public class A { int test0; public A() { test 5; Console.WriteLine(I am A 公有默认构造函数 test{0}, test); } } class B : A { } class InheritanceTest1 { static void Main(string[] args) { B b new B(); Console.Read(); } } 结果I am A 公有默认构造函数 test5 由此可以看见基类的构造函数被执行在派生类中被调用。 如果基类定义了带有参数的构造函数那么此构造函数必须被执行且在派生类中实现该构造函数此时我们可以使用base关键字 class A { int test0; public A(int i) { test i; Console.WriteLine(I am A 公有有参构造函数 test{0}, test); } } class B : A { public B(int j):base(j) { Console.WriteLine(I am B 公有有参构造函数j{0},j); } } class InheritanceTest1 { static void Main(string[] args) { B b new B(1); Console.Read(); } } 结果I am A 公有有参构造函数 test1 I am B 公有有参构造函数j1 由此可见 派生类隐式执行基类中带有参数的构造函数在程序中基类定义了带有参数的构造函数 在其派生类中被继承并使用base关键字调用基类中的构造函数来传送参数。 我们可以从代码中看到在创建派生类的对象后程序首先运行的是基类的构造函数中的内容然后才是派生类中的内容。 如果派生类的基类也是派生类则每个派生类只需负责其直接基类的构造不负责间接基类的构造 并且其执行构造函数的顺序是从最上面的基类开始的直到最后一个派生类结束。 本文版权归作者和博客园共有欢迎转载但未经作者同意必须保留此段声明并在文章页面明显位置以超链接形式注明出处否则保留追究法律责任的权利。 原文地址http://www.cnblogs.com/jiajiayuan/archive/2011/09/09/2172292.html