using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 虚方法
{
class class1
{
///虚方法8-4 ************************************************
///默认的方法被指定为私有的,只能在当前类中进行访问
///需要在其他类中访问就需要指定为public 访问权限最高,只要在项目内部都可以访问
public virtual void virtualMethod() //因为虚方法能在派生类中进行重写
{
Console.WriteLine("这是一个虚方法");
}
public void nonVirtualMehtod()
{
Console.WriteLine("这是一个非虚方法");
}
}
//非虚方法的实现是一成不变的:无论该方法是在声明他的类的实例上还是在派生类的
//实例上调用,实现均相同
//于此相反,虚方法的实现可以由派生类取代,取代所继承的虚方法的实现的过程称为重写(override)该方法。****************
//在虚方法调用中,该调用所涉及的那个实例的运行时类型确定了要被调用的究竟是该方法的哪一种实现,在非虚方法调用中,相关的实例的编译时类型是确定性因素
class class2 : class1 //将class2继承于class1
{
//重写一个虚方法
public override void virtualMethod()
{
Console.WriteLine("这是一个新写的虚方法");
}
public new void nonVirtualMehtod()
{
Console.WriteLine("这是一个新的方法");
}
}
class Program
{
static void Main(string[] args)
{
class1 c1 = new class1(); //将类实例化
c1.virtualMethod();
c1.nonVirtualMehtod();
class2 c2 = new class2();
c2.virtualMethod();
c2.nonVirtualMehtod();
c1 = c2;
c1.virtualMethod();
c1.nonVirtualMehtod();
Console.ReadKey();
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 虚方法
{
class class1
{
///虚方法8-4 ************************************************
///默认的方法被指定为私有的,只能在当前类中进行访问
///需要在其他类中访问就需要指定为public 访问权限最高,只要在项目内部都可以访问
public virtual void virtualMethod() //因为虚方法能在派生类中进行重写
{
Console.WriteLine("这是一个虚方法");
}
public void nonVirtualMehtod()
{
Console.WriteLine("这是一个非虚方法");
}
}
//非虚方法的实现是一成不变的:无论该方法是在声明他的类的实例上还是在派生类的
//实例上调用,实现均相同
//于此相反,虚方法的实现可以由派生类取代,取代所继承的虚方法的实现的过程称为重写(override)该方法。****************
//在虚方法调用中,该调用所涉及的那个实例的运行时类型确定了要被调用的究竟是该方法的哪一种实现,在非虚方法调用中,相关的实例的编译时类型是确定性因素
class class2 : class1 //将class2继承于class1
{
//重写一个虚方法
public override void virtualMethod()
{
Console.WriteLine("这是一个新写的虚方法");
}
public new void nonVirtualMehtod()
{
Console.WriteLine("这是一个新的方法");
}
}
class Program
{
static void Main(string[] args)
{
class1 c1 = new class1(); //将类实例化
c1.virtualMethod();
c1.nonVirtualMehtod();
class2 c2 = new class2();
c2.virtualMethod();
c2.nonVirtualMehtod();
c1 = c2;
c1.virtualMethod();
c1.nonVirtualMehtod();
Console.ReadKey();
}
}
}