override重写是重新实现基类的方法 new 是新建的方法....他们有什么区别?。 重写可以实现多态.. class A { public virtual void method(); } class B:A { public override void method(); }class main { public static void main() { A a=new B(); a.method();// 实际是调用B.method } }
class MyBaseClass { public virtual string DoSomething() { return "ff"; } public string DoSomething2() { return "ff"; } } class MyDerivedClass : MyBaseClass { public override string DoSomething() { return "gg"; } public new string DoSomething2() { return "gg"; } }MyBaseClass aa = new MyDerivedClass(); MyBaseClass bb = new MyBaseClass();分别看看aa和bb的DoSomething和DoSomething2就知道了。
namespace kkun { class kkun { class MyBaseClass { public virtual string DoSomething() { return "11"; } public string DoSomething2() { return "12"; } } class MyDerivedClass : MyBaseClass { public override string DoSomething() { return "21"; } public new string DoSomething2() { return "22"; } } static void Main() { MyBaseClass aa = new MyDerivedClass(); MyBaseClass bb = new MyBaseClass(); MyDerivedClass cc=new MyDerivedClass(); System.Console.WriteLine(aa.DoSomething());//21 System.Console.WriteLine(aa.DoSomething2());//12 System.Console.WriteLine(bb.DoSomething());//11 System.Console.WriteLine(bb.DoSomething2());//12 System.Console.WriteLine(cc.DoSomething());//21 System.Console.WriteLine(cc.DoSomething2());//22 System.Console.ReadLine(); } }}
override是在当前类中重写父类方法
那基类的代码到底有没有被修改
protected void Button2_Click(object sender, EventArgs e)
{
MyDerivedClass aa = new MyDerivedClass();
MyBaseClass bb = new MyBaseClass();
Label1.Text = aa.DoSomething();
Label2.Text = bb.DoSomething();
}
class MyBaseClass
{
public virtual string DoSomething()
{
return "ff";
}
} class MyDerivedClass : MyBaseClass
{
public override string DoSomething()
{
return "gg";
}
}显示的还是gg ff
那就是说基类还是原的的执行代码啊
那到底重写了什么啊
如果父类方法是virturl时,用那种方法都行,我理解地也不深刻,sorry
Label2.Text = "ff";
new 是新建的方法....他们有什么区别?。 重写可以实现多态..
class A
{
public virtual void method();
}
class B:A
{
public override void method();
}class main
{
public static void main()
{
A a=new B();
a.method();// 实际是调用B.method
}
}
那到底重写了什么啊
----------------
重写指的是在子类的实现,父类的此方法在子类已经被修改,不知道你听明白没有!
父类的方法不变,不会被子类的override改变
{
public virtual string DoSomething()
{
return "ff";
} public string DoSomething2()
{
return "ff";
}
} class MyDerivedClass : MyBaseClass
{
public override string DoSomething()
{
return "gg";
}
public new string DoSomething2()
{
return "gg";
}
}MyBaseClass aa = new MyDerivedClass();
MyBaseClass bb = new MyBaseClass();分别看看aa和bb的DoSomething和DoSomething2就知道了。
{
class kkun
{
class MyBaseClass
{
public virtual string DoSomething()
{
return "11";
} public string DoSomething2()
{
return "12";
}
} class MyDerivedClass : MyBaseClass
{
public override string DoSomething()
{
return "21";
}
public new string DoSomething2()
{
return "22";
}
}
static void Main()
{
MyBaseClass aa = new MyDerivedClass();
MyBaseClass bb = new MyBaseClass();
MyDerivedClass cc=new MyDerivedClass();
System.Console.WriteLine(aa.DoSomething());//21
System.Console.WriteLine(aa.DoSomething2());//12
System.Console.WriteLine(bb.DoSomething());//11
System.Console.WriteLine(bb.DoSomething2());//12
System.Console.WriteLine(cc.DoSomething());//21
System.Console.WriteLine(cc.DoSomething2());//22
System.Console.ReadLine();
}
}}