本栏目由法外狂徒:(Zhangsan)提供"合法"行为
有些人不知道c#的Override和new区别,今天来梳理一下
override重写
故名可知,override用来重写成员的
举个例子,假如有一张公共的纸,上面写满了成员和信息,到你写的时候,发现有一个成员刚好就是自己想写的成员,于是,你先把这张纸上的对应成员给用修正带给涂抹掉,然后在写上自己的成员和信息(好残忍)
当然必须要经过别人的允许,所以被重写的成员必须加上virtual关键词才可以,表示你认同这个(不fa分子)擦除你的成员
new隐藏
继续这个(不fa分子)的(作案)手法
继续假如有一张公共的纸,上面写满了成员和信息,到你写的时候,发现有一个成员刚好就是自己想写的成员,于是,你先把这张纸上的对应成员用便利贴贴上去,然后在便利贴上写上自己的成员和信息
什么不同?
如果只是在自己的类中,是不明显的,但在转化时就非常明显了
override即使转化成其他类,在调用成员时任然就调用这个类的成员
你觉得涂改液威力大呢,还是修正带威力大呢
举例
public class TestA
{
public virtual void YOUIS()
{
Console.WriteLine("hello");
}
}
调用
TestA a = new TestA();
a.YOUIS();
输出
hello
但是这个(法外狂徒)这样操作
public class TestB : TestA
{
public override void YOUIS()
{
Console.WriteLine("fuck e y");
}
}
调用
TestB b = new TestB();
b.YOUIS();
TestA a = (TestA)b;
a.YOUIS();
输出
fuck e y
fuck e y
就好像,这个纸的主人回来,看到这个被涂改液涂改的成员,于是心里开始了激烈的斗争,到底是扣还是不扣,扣会损毁纸,不扣我得执行这个方法,但是发现这个方法写的"非常好",于是执行了这个方法
正经知识:在声明了virtual表明这个方法的信息可以重新填充,override(法外狂徒)来了
new隐藏方法,如果转化为其他类,调用就按其他类的成员调用
请问,那个便利贴贴上去就扯不下来的
举例
public class TestA
{
public void YOUIS()
{
Console.WriteLine("hello");
}
}
调用
TestA a = new TestA();
a.YOUIS();
输出
hello
但是这个(法外狂徒)这样(人性化)操作
public class TestB : TestA
{
public new void YOUIS()
{
Console.WriteLine("fuck e y");
}
}
调用
TestB b = new TestB();
b.YOUIS();
TestA a = (TestA)b;
a.YOUIS();
输出
fuck e y
hello
就好像,这个纸的主人回来,看到这个被贴上去的标签,于是气的把它撕下来(不会扔掉,转化回来会重新贴上去),执行自己的方法
正经知识:new隐藏,即使不用这个,c#也是会优先调用这个类的成员
<后续补充>
{ none }