基础知识一:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Windows.Forms;
  5.  
  6. namespace WindowsFormsApplication2
  7. {
  8. public class ParentClass
  9. {
  10. public ParentClass()
  11. {
  12.  
  13. }
  14. public string NamePropety { get; set; }
  15.  
  16. public string GetName()
  17. {
  18. return "";
  19. }
  20. }
  21.  
  22. public class ChildClass : ParentClass
  23. {
  24. public ChildClass()
  25. {
  26.  
  27. }
  28.  
  29. public int Age { get; set; }
  30.  
  31. public int GetAge()
  32. {
  33. return ;
  34. }
  35. }
  36.  
  37. static class Program
  38. {
  39. /// <summary>
  40. /// 应用程序的主入口点。
  41. /// </summary>
  42. [STAThread]
  43. static void Main()
  44. {
  45. //=>1、实例化父类
  46. ParentClass parent = new ParentClass();
  47. string _NamePropety = parent.NamePropety;
  48. string _name = parent.GetName();
  49.  
  50. //1.1向上转型 子类转父类
  51. ParentClass parent1 = new ChildClass(); //或者ParentClass parent1 = new ChildClass() as ParentClass;
  52. string _NamePropety1 = parent1.NamePropety;
  53. string _name1 = parent1.GetName();
  54.  
  55. //=>2、实例化子类
  56. ChildClass child = new ChildClass();
  57. string _NamePropety2 = child.NamePropety;
  58. string _name2 = child.GetName();
  59. int ageName2 = child.GetAge();
  60. int age2 = child.Age;
  61.  
  62. //2.1向下转型 父类转换子类。
  63. ParentClass child3 = new ChildClass();
  64. ChildClass child4 = (ChildClass)child3;
  65. string _NamePropety3 = child4.NamePropety;
  66. string _name3 = child4.GetName();
  67. int ageName3 = child4.GetAge();
  68. int age3 = child4.Age;
  69.  
  70. //=>3、不正确的父类转子类。
  71.  
  72. //as方式转换。(as 转换失败时,程序不会抛异常,child1对象为NULL。)
  73. ChildClass child1 = new ParentClass() as ChildClass; //或者 ChildClass child1 = (ChildClass)new ParentClass();
  74. Console.WriteLine(child1.NamePropety);
  75.  
  76. //强制转换。(程序会抛出异常。)
  77. ChildClass child1_1 = (ChildClass)new ParentClass();
  78.  
  79. Application.EnableVisualStyles();
  80. Application.SetCompatibleTextRenderingDefault(false);
  81. Application.Run(new Form1());
  82. }
  83.  
  84. }
  85. }

基础知识二:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Windows.Forms;
  7. using IBO.XJMYQP.ControlLib;
  8.  
  9. namespace IBO.XJMYQP.UI
  10. {
  11. public class ParentClass
  12. {
  13. public ParentClass()
  14. {
  15. Console.WriteLine("初始化父类构造函数");
  16. }
  17. public virtual void Test1()
  18. {
  19. Console.WriteLine("我是基类的Test1");
  20. }
  21. public void Test2()
  22. {
  23. Console.WriteLine("我是基类的Test2");
  24. }
  25. public virtual void Test3()
  26. {
  27. Console.WriteLine("我是基类的Test3");
  28. }
  29. //=>//protected访问修饰符在大多数资料中的定义:访问仅限于包含类或从包含类派生的类型。包含类指的父类
  30. protected void Test4()
  31. {
  32.  
  33. }
  34. }
  35.  
  36. public class ChildClass : ParentClass
  37. {
  38. public ChildClass()
  39. {
  40. Console.WriteLine("初始化子类构造函数");
  41. }
  42. public override void Test1()
  43. {
  44. Console.WriteLine("我是子类的Test1");
  45. }
  46.  
  47. public new void Test2()
  48. {
  49. Console.WriteLine("我是子类的Test2");
  50. }
  51.  
  52. public new void Test3()
  53. {
  54. Console.WriteLine("我是子类的Test3");
  55. }
  56.  
  57. }
  58.  
  59. static class Program
  60. {
  61. /// <summary>
  62. /// 应用程序的主入口点。
  63. /// </summary>
  64. [STAThread]
  65. static void Main()
  66. {
  67. Console.WriteLine("-------(1)、new ParentClass()用于调用的都是基类 Begin-----------");
  68. //=》调用的是基类。
  69. ParentClass b1 = new ParentClass();
  70. b1.Test1();
  71. ParentClass b2 = new ParentClass();
  72. b2.Test2();
  73. ParentClass b3 = new ParentClass();
  74. b3.Test3();
  75. Console.WriteLine("-------END-----------");
  76.  
  77. Console.WriteLine("-------(2)、override关键字与父类的virtual 关键字 Begin-----------");
  78.  
  79. //=>override 关键字,重写父类的方法。只要 new ChildClass()后,不管对象转化谁调用的都是子类重写方法。
  80. ParentClass p1 = new ChildClass();
  81. p1.Test1();
  82. ChildClass c1 = new ChildClass();
  83. c1.Test1();
  84.  
  85. Console.WriteLine("-------END-----------");
  86.  
  87. Console.WriteLine("-------(3)、new 关键字 Begin-----------");
  88.  
  89. ParentClass p2 = new ChildClass();
  90. p2.Test2();
  91. ChildClass c2 = new ChildClass();
  92. c2.Test2();
  93.  
  94. Console.WriteLine("-------END-----------");
  95.  
  96. Console.WriteLine("-------(4)、new 关键字与父类的virtual Begin-----------");
  97.  
  98. //=>new 关键字,就是独立子类与父类的相同方法,转化为谁后调用的就是谁。
  99. ParentClass p3 = new ChildClass();
  100. p3.Test3();
  101. ChildClass c3 = new ChildClass();
  102. c3.Test3();
  103.  
  104. Console.WriteLine("-------END-----------");
  105.  
  106. Console.ReadKey();
  107.  
  108. }
  109. }
  110. }

  输出:

  1. -------(1)、new ParentClass()用于调用的都是基类 Begin-----------
  2. 初始化父类构造函数
  3. 我是基类的Test1
  4. 初始化父类构造函数
  5. 我是基类的Test2
  6. 初始化父类构造函数
  7. 我是基类的Test3
  8. -------END-----------
  9. -------(2)、override关键字与父类的virtual 关键字 Begin-----------
  10. 初始化父类构造函数
  11. 初始化子类构造函数
  12. 我是子类的Test1
  13. 初始化父类构造函数
  14. 初始化子类构造函数
  15. 我是子类的Test1
  16. -------END-----------
  17. -------(3)、new 关键字 Begin-----------
  18. 初始化父类构造函数
  19. 初始化子类构造函数
  20. 我是基类的Test2
  21. 初始化父类构造函数
  22. 初始化子类构造函数
  23. 我是子类的Test2
  24. -------END-----------
  25. -------(4)、new 关键字与父类的virtual Begin-----------
  26. 初始化父类构造函数
  27. 初始化子类构造函数
  28. 我是基类的Test3
  29. 初始化父类构造函数
  30. 初始化子类构造函数
  31. 我是子类的Test3
  32. -------END-----------

  

C#基础知识—父类和子类的关系的更多相关文章

  1. C#基础知识之父子类,实例、静态成员变量,构造函数的执行顺序(经典示例)

    父子类.示例.静态成员变量.构造函数的概念的基础理解完全可以利用下面的示例诠释,非常经典,直接上代码: public class ShowInfo { public ShowInfo(string i ...

  2. opencv基础知识------IplImage, CvMat, Mat 的关系和相互转换

    Mat,cvMat和IplImage这三种类型都可以代表和显示图像,但是,Mat类型侧重于计算,数学性较高,openCV对Mat类型的计算也进行了优化.而CvMat和IplImage类型更侧重于“图像 ...

  3. Java中的继承:父类和子类的关系

    一.父类引用指向子类对象时 1.若子类覆盖了某方法,则父类引用调用子类重新定义的新方法 2.若子类未覆盖某方法,则父类引用调用父类本身的旧方法 3.若子类覆盖了某属性,但父类引用仍调用父类本身的旧属性 ...

  4. java基础:父类与子类之间变量和方法的调用

    1)父类构造函数 java中当调用某个类的构造方法的时候,系统总会调用父类的非静态初始化块进行初始化,这个调用是隐式的,而且父类的静态初始化代码 块总是会被执行,接着调用父类的一个或者多个构造器执行初 ...

  5. ASP.NET Core 基础知识(五) 依赖关系注入

    参考https://www.cnblogs.com/jesse2013/p/di-in-aspnetcore.html 和 https://www.cnblogs.com/artech/p/net-c ...

  6. java基础知识一览

    一.关键字:JDK1.5的新特性.Eclipse.MyEclipse.IDE.Workspace.Perspective.view.设置javac和java的版本.模块代码.快捷键.导入工程.静态导入 ...

  7. JAVA OOP 基础知识提纲

    OOP: 面向对象: 认识事物的一个过程,是整体(特征/行为) 认识事物的方式.人类认识事物的自然思维习惯. 对象及类 对象是实实在在具体存在的东西,主要是从两个角度(行为,特征)去观察 类:是一组具 ...

  8. c++ --> 父类与子类间的继承关系

    父类与子类间的继承关系 一.父类与子类 父类与子类的相互转换 1.派生类的对象可以赋给基类,反之不行 2.基类的指针可以指向派生类,反之不行 3.基类的引用可以初始化为派生类的对象,反之不行 4.派生 ...

  9. 使用Code First建模自引用关系笔记 asp.net core上使用redis探索(1) asp.net mvc控制器激活全分析 语言入门必学的基础知识你还记得么? 反射

    使用Code First建模自引用关系笔记   原文链接 一.Has方法: A.HasRequired(a => a.B); HasOptional:前者包含后者一个实例或者为null HasR ...

随机推荐

  1. 13个小技巧帮你征服Xcode

    本文由CocoaChina翻译组成员唧唧歪歪(博客)翻译自David McGraw的博客原文:13 Xcode Tips That Will Help You Conquer Xcode当谈论到iOS ...

  2. [Codeforces Round #254 div1] C.DZY Loves Colors 【线段树】

    题目链接:CF Round #254 div1 C 题目分析 这道题目是要实现区间赋值的操作,同时还要根据区间中原先的值修改区间上的属性权值. 如果直接使用普通的线段树区间赋值的方法,当一个节点表示的 ...

  3. hdu 4731

    一道找规律的题,但今天的智商捉急,一直都想不到点子上: 比赛之后和别人讨论的时候,在n=2的情况下,前面两个是aa,后面就接着很多个aababb,然后最后再判断下就行了~~~ 以后对于这种题还是不要太 ...

  4. Android 使用XmlSerializer生成xml文件

    在Android开发中,我们时常要用到xml文件. xml作为一种数据载体,在数据传输中发挥着重要的作用,而且它可读性比较强. 下面给出在Android开发中使用XmlSerializer类生成一个简 ...

  5. poj1436 Horizontally Visible Segments

    这是一个区间更新的题目,先将区间放大两倍,至于为什么要放大可以这样解释,按照从左到右有4个区间,y值是[1,5],[1,2],[3,4],[1,4]如果不放大的话,查询[1,4]区间和前面区间的”可见 ...

  6. 使用solrj进行DIH操作

    背景说明:在一个项目中需要将Mongodb中的数据导入到solr中完成搜索.在solr中Mysql数据库有对应的DIH包,可以通过配置sql语句完成数据的导入.Mongodb下也有开源的工具用来实现数 ...

  7. 可恶的QT隐式共享

    这个问题隐藏的很深,一般不容易察觉它造成的问题,而只是享受它提供的好处(节省内存,而且速度更快). 但我发现它现在至少造成两个问题: 1. 把大量的QString放到QMap里,使用完毕后清空QMap ...

  8. struts2结合生成验证码

    import java.util.Arrays; /** * 工具类,生成随机验证码字符串 * @version 1.0 2012/12/01 * @author shiyz * */ public ...

  9. 【转】 Android BCM4330 蓝牙BT驱动调试记录

    原文网址:http://blog.csdn.net/dwyane_zhang/article/details/7180779 网上关于BT的驱动很少,所以我在开发过程中把其中的步骤记录下来.供大家相互 ...

  10. SLua 中继承 C# 类接口 Slua.Class 的一个 Bug。

    由于目前要把大量的代码移植到 lua 中(真是够虐心的),面向对象肯定少不了,项目的代码都是这么设计的,于是就测试 Slua.Class 接口来扩展 C# 的类,发现有点问题,给作者提交了一个 Iss ...