日期:2014-05-17  浏览次数:20834 次

提问 问题标签用户 C#多态中new 和(className)的区别
class A
{
public virtual void test1()
{
cnosole.writeline("test1 in A");
}
}
class B
{
public override void test1()
{
cnosole.writeline("test1 in B");
}
}

main()
{
B b=new B();
A a1=new B();
A a2=(A)b;
}

请问各位大神A a1=new B()、和A a2=(A)b,有什么区别?

------解决方案--------------------
new是创建新实例,第二个是转换,这样a2和b是同一个东西,修改任何一个,都会影响到另一个
------解决方案--------------------
那就是一样的了,你要是调同样的方法都是调用B类的那个test1 in B 因为他被overwrite了
------解决方案--------------------
引用:
Quote: 引用:

那就是一样的了,你要是调同样的方法都是调用B类的那个test1 in B 因为他被overwrite了


就没有别的不同?只是语法上面的表达不同?


a1,a2使用起来一样的。

如果要扣细了的话,那你先new 一个B, 然后又 A a2= (A)b;
中间不是多了一步吗?而且多了一个变量b。
其他没什么。