关于 类的 virtual 实例 说明 (c#)
来源:互联网 发布:java是开源的吗 编辑:程序博客网 时间:2024/05/29 03:20
using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{
/*1、如果方法不是virtual的,编译器就使用声明的类对应的类型,也就是说,不是virtual的,在编译时候,就定了。比如下面的例子:子类的方法都没有执行,执行的全部都是父类的方法。
2、如果方法是Virtual的,然后子类使用了override, 编译器就生产代码。然后,在运行的时候,进行检测,看对象属于哪个类,然后调用这个类的方法。 */
#region 非virtual
public class ClassFather
{
public string FatherName;
// virtual public void VirFun()
public void VirFun()
{ Console.WriteLine(FatherName); }
}
public class ClassBoy : ClassFather
{
public string BoyName;
public new void VirFun()
{ base.VirFun(); }
}
public class ClassGirl : ClassFather
{
public string GirlName;
public new void VirFun()
{
base.VirFun();
Console.WriteLine(FatherName);
}
}
#endregion
#region virtual
public class ClassFather1
{
public ClassFather1()
{
FatherName = "FatherName";
FatherName1 = "FatherName1";
Console.WriteLine("ClassFather1 构造函数输出:FatherName=" + FatherName + ",FatherName1=" + FatherName1);
}
public string FatherName;
public string FatherName1;
// virtual public void VirFun()
public virtual void VirFun()
{ Console.WriteLine(FatherName); }
public virtual void VirFun1()
{
Console.WriteLine("ClassFather1的VirFun1的输出");
}
public void VirFun2()
{
Console.WriteLine("ClassFather1的VirFun2的输出");
}
}
public class ClassBoy1 : ClassFather1
{
public ClassBoy1()
{
Console.WriteLine("ClassBoy1 构造函数输出:FatherName=" + FatherName + ",FatherName1=" + FatherName1);
}
public string BoyName;
public new void VirFun()
{ Console.WriteLine("ClassBoy1 VirFun输出"); }
public override void VirFun1()
{
Console.WriteLine("ClassBoy1 VirFun1输出");
}
}
public class ClassGirl1 : ClassFather1
{
public string GirlName;
public ClassGirl1()
{
Console.WriteLine("ClassGirl1 构造函数输出:FatherName=" + FatherName + ",FatherName1=" + FatherName1);
}
public new void VirFun()
{
Console.WriteLine("ClassGirl1 VirFun输出");
}
public override void VirFun1()
{
Console.WriteLine("ClassGirl1 VirFun1输出");
}
public void VirFun2()
{
Console.WriteLine("ClassGirl1 VirFun2输出");
}
public void VirFun3()
{
Console.WriteLine("ClassGirl1 VirFun3输出");
}
}
#endregion
public class Test
{
public static void Main()
{
ClassFather1 a1 = new ClassFather1();
a1.FatherName = "father";
a1.VirFun();
ClassFather1 b1 = new ClassBoy1();
b1.FatherName = "boy";
b1.VirFun();
b1.VirFun1();
b1.VirFun2();
ClassFather1 c1 = new ClassGirl1();
c1.FatherName = "girl";
c1.VirFun();
c1.VirFun1();
c1.VirFun2();
ClassGirl1 c11 = new ClassGirl1();
c11.FatherName = "girl11";
c11.VirFun();
c1.VirFun();
c11.VirFun1();
c1.VirFun1();
c11.VirFun2();
c1.VirFun2();
c11.VirFun3();
}
}
}
- 关于 类的 virtual 实例 说明 (c#)
- C#关于虚方法和重写的实例说明(virtual 和override)
- (原创)关于继承实例化的说明(c#)
- 关于实例下载的说明
- 关于Virtual Base Class的几点说明
- 关于C#:abstract,virtual
- [C/C++]关于C++类成员函数的重载、覆盖、隐藏与virtual关键字
- 读书笔记(关于C#中的virtual 和 new)
- virtual和abstract的区别(C#)
- 关于C语言的一点说明
- 关于C/C++博文的说明
- 关于 Objective-C iVar 的一点说明
- Object-C 关于引用计数的说明
- 关于C中extern的说明
- Virtual & Abstract (C++)
- virtual继承出来的类实例出现delete异常
- 关于DALFactory无法反射创建类实例的常见错误说明
- Java编程思想中的一个关于类实例化的说明
- [杂记] 新年物语&关于Mysql引擎性能测试
- break 的一个“高级用法”
- 雪豹10.6.2下安装Django/MySQLdb
- iframe去除边框
- 按月生成日历,以datatable形式显示。
- 关于 类的 virtual 实例 说明 (c#)
- 程序员们,请珍爱自己的身体
- 国际货运市场“报复式”反弹 运货费贵于机票
- VB过滤中文字符串源码
- C#操作注册表(读写)
- 几种网页爬取的方法与实现(Java)
- 利用DLP系统为CRM数据保驾护航
- 也谈error LNK2005错误一例
- 函数printf的运算顺序