C#基础知识—父类和子类的关系
基础知识一:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms; namespace WindowsFormsApplication2
{
public class ParentClass
{
public ParentClass()
{ }
public string NamePropety { get; set; } public string GetName()
{
return "";
}
} public class ChildClass : ParentClass
{
public ChildClass()
{ } public int Age { get; set; } public int GetAge()
{
return ;
}
} static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
//=>1、实例化父类
ParentClass parent = new ParentClass();
string _NamePropety = parent.NamePropety;
string _name = parent.GetName(); //1.1向上转型 子类转父类
ParentClass parent1 = new ChildClass(); //或者ParentClass parent1 = new ChildClass() as ParentClass;
string _NamePropety1 = parent1.NamePropety;
string _name1 = parent1.GetName(); //=>2、实例化子类
ChildClass child = new ChildClass();
string _NamePropety2 = child.NamePropety;
string _name2 = child.GetName();
int ageName2 = child.GetAge();
int age2 = child.Age; //2.1向下转型 父类转换子类。
ParentClass child3 = new ChildClass();
ChildClass child4 = (ChildClass)child3;
string _NamePropety3 = child4.NamePropety;
string _name3 = child4.GetName();
int ageName3 = child4.GetAge();
int age3 = child4.Age; //=>3、不正确的父类转子类。 //as方式转换。(as 转换失败时,程序不会抛异常,child1对象为NULL。)
ChildClass child1 = new ParentClass() as ChildClass; //或者 ChildClass child1 = (ChildClass)new ParentClass();
Console.WriteLine(child1.NamePropety); //强制转换。(程序会抛出异常。)
ChildClass child1_1 = (ChildClass)new ParentClass(); Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
} }
}
基础知识二:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using IBO.XJMYQP.ControlLib; namespace IBO.XJMYQP.UI
{
public class ParentClass
{
public ParentClass()
{
Console.WriteLine("初始化父类构造函数");
}
public virtual void Test1()
{
Console.WriteLine("我是基类的Test1");
}
public void Test2()
{
Console.WriteLine("我是基类的Test2");
}
public virtual void Test3()
{
Console.WriteLine("我是基类的Test3");
}
//=>//protected访问修饰符在大多数资料中的定义:访问仅限于包含类或从包含类派生的类型。包含类指的父类
protected void Test4()
{ }
} public class ChildClass : ParentClass
{
public ChildClass()
{
Console.WriteLine("初始化子类构造函数");
}
public override void Test1()
{
Console.WriteLine("我是子类的Test1");
} public new void Test2()
{
Console.WriteLine("我是子类的Test2");
} public new void Test3()
{
Console.WriteLine("我是子类的Test3");
} } static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
Console.WriteLine("-------(1)、new ParentClass()用于调用的都是基类 Begin-----------");
//=》调用的是基类。
ParentClass b1 = new ParentClass();
b1.Test1();
ParentClass b2 = new ParentClass();
b2.Test2();
ParentClass b3 = new ParentClass();
b3.Test3();
Console.WriteLine("-------END-----------"); Console.WriteLine("-------(2)、override关键字与父类的virtual 关键字 Begin-----------"); //=>override 关键字,重写父类的方法。只要 new ChildClass()后,不管对象转化谁调用的都是子类重写方法。
ParentClass p1 = new ChildClass();
p1.Test1();
ChildClass c1 = new ChildClass();
c1.Test1(); Console.WriteLine("-------END-----------"); Console.WriteLine("-------(3)、new 关键字 Begin-----------"); ParentClass p2 = new ChildClass();
p2.Test2();
ChildClass c2 = new ChildClass();
c2.Test2(); Console.WriteLine("-------END-----------"); Console.WriteLine("-------(4)、new 关键字与父类的virtual Begin-----------"); //=>new 关键字,就是独立子类与父类的相同方法,转化为谁后调用的就是谁。
ParentClass p3 = new ChildClass();
p3.Test3();
ChildClass c3 = new ChildClass();
c3.Test3(); Console.WriteLine("-------END-----------"); Console.ReadKey(); }
}
}
输出:
-------(1)、new ParentClass()用于调用的都是基类 Begin-----------
初始化父类构造函数
我是基类的Test1
初始化父类构造函数
我是基类的Test2
初始化父类构造函数
我是基类的Test3
-------END-----------
-------(2)、override关键字与父类的virtual 关键字 Begin-----------
初始化父类构造函数
初始化子类构造函数
我是子类的Test1
初始化父类构造函数
初始化子类构造函数
我是子类的Test1
-------END-----------
-------(3)、new 关键字 Begin-----------
初始化父类构造函数
初始化子类构造函数
我是基类的Test2
初始化父类构造函数
初始化子类构造函数
我是子类的Test2
-------END-----------
-------(4)、new 关键字与父类的virtual Begin-----------
初始化父类构造函数
初始化子类构造函数
我是基类的Test3
初始化父类构造函数
初始化子类构造函数
我是子类的Test3
-------END-----------
C#基础知识—父类和子类的关系的更多相关文章
- C#基础知识之父子类,实例、静态成员变量,构造函数的执行顺序(经典示例)
父子类.示例.静态成员变量.构造函数的概念的基础理解完全可以利用下面的示例诠释,非常经典,直接上代码: public class ShowInfo { public ShowInfo(string i ...
- opencv基础知识------IplImage, CvMat, Mat 的关系和相互转换
Mat,cvMat和IplImage这三种类型都可以代表和显示图像,但是,Mat类型侧重于计算,数学性较高,openCV对Mat类型的计算也进行了优化.而CvMat和IplImage类型更侧重于“图像 ...
- Java中的继承:父类和子类的关系
一.父类引用指向子类对象时 1.若子类覆盖了某方法,则父类引用调用子类重新定义的新方法 2.若子类未覆盖某方法,则父类引用调用父类本身的旧方法 3.若子类覆盖了某属性,但父类引用仍调用父类本身的旧属性 ...
- java基础:父类与子类之间变量和方法的调用
1)父类构造函数 java中当调用某个类的构造方法的时候,系统总会调用父类的非静态初始化块进行初始化,这个调用是隐式的,而且父类的静态初始化代码 块总是会被执行,接着调用父类的一个或者多个构造器执行初 ...
- ASP.NET Core 基础知识(五) 依赖关系注入
参考https://www.cnblogs.com/jesse2013/p/di-in-aspnetcore.html 和 https://www.cnblogs.com/artech/p/net-c ...
- java基础知识一览
一.关键字:JDK1.5的新特性.Eclipse.MyEclipse.IDE.Workspace.Perspective.view.设置javac和java的版本.模块代码.快捷键.导入工程.静态导入 ...
- JAVA OOP 基础知识提纲
OOP: 面向对象: 认识事物的一个过程,是整体(特征/行为) 认识事物的方式.人类认识事物的自然思维习惯. 对象及类 对象是实实在在具体存在的东西,主要是从两个角度(行为,特征)去观察 类:是一组具 ...
- c++ --> 父类与子类间的继承关系
父类与子类间的继承关系 一.父类与子类 父类与子类的相互转换 1.派生类的对象可以赋给基类,反之不行 2.基类的指针可以指向派生类,反之不行 3.基类的引用可以初始化为派生类的对象,反之不行 4.派生 ...
- 使用Code First建模自引用关系笔记 asp.net core上使用redis探索(1) asp.net mvc控制器激活全分析 语言入门必学的基础知识你还记得么? 反射
使用Code First建模自引用关系笔记 原文链接 一.Has方法: A.HasRequired(a => a.B); HasOptional:前者包含后者一个实例或者为null HasR ...
随机推荐
- 解决treeview的同一节点单击多次的执行问题
在使用treeview的AfterSelect函数的时候,单击同一节点多次无响应. 解决方法: 将首次单击的节点信息保存到selectTreeNode: 然后使用click函数,判断单击的节点是否和s ...
- bootstrap-datepicker 日期拾取器
最近开发的项目界面用的是bootstrap的框架,发现开源的东西真的很多,慢慢的我会记录到上面来 地址 http://www.bootcss.com/p/bootstrap-datetimepick ...
- 【XCode7+iOS9】http网路连接请求、MKPinAnnotationView自定义图片和BitCode相关错误--备用
更新了iOS9和XCode7,之后,Swift变成了2.0,有了新的语法习惯,iOS也加强了安全方面的限制.我们原本的项目就会出现不少问题.先来看我之前的项目中出现的3个错误吧和相关的解决办法吧. 1 ...
- uva 12097 - Pie
简单题,二分就行: #include<cstdio> #include<cmath> #define pi acos(-1.0) #define eps 0.000001 #d ...
- Ubuntu修改语言环境为英文
转自把语言环境变量改为英文 将Ubuntu系统语言环境改为英文的en_US.UTF-8 查看当前系统语言环境 locale 编辑配置文件,将zh_US.UTF-8改为en_US.UTF-8,zh改为e ...
- 运行 maven install的时候出现错误 not a jre
原文转自jingyan.baidu.com/article/c85b7a6464d8be003bac95fb.html (linux下我直接执行第二步,错误解决) 在使用eclipse 运行 mave ...
- 如何备份MySql的数据库
如何备份MySql的数据库 应该说一般的数据库都有BackUp的需求, MySql备份数据库的方式很简单, 但是在网上说得云里雾里, 也应该是我对MySql数据库不熟悉. 目标(Target) : ...
- Android Bitmap是不能比较的,这样做是错误的
代码1: Bitmap dir = BitmapFactory.decodeResource(context.getResources(), R.drawable.netdisc_search_lis ...
- Android内存优化之——static使用篇
在Android开发中,我们经常会使用到static来修饰我们的成员变量,其本意是为了让多个对象共用一份空间,节省内存,或者是使用单例模式,让该类只生产一个实例而在整个app中使用.然而在某些时候不恰 ...
- Navicate使用注意事项
2. Navicat如何连接数据库:点击连接——>输入连接名,然后如果是本机不用更改localhost,如果是别的主机,要将对方 的ip地址输入,端口号3306不变,用户名root,密 ...