初学c#,大家多指教。
在派生类的方法中指定new修饰符,除了不会让编译器产生警告,还有没有其他用途。
例如
class A
{
public fun1()
{
....
}
}
class B:A
{
new public fun1()
{
....
}
}
在派生类的方法中指定new修饰符,除了不会让编译器产生警告,还有没有其他用途。
例如
class A
{
public fun1()
{
....
}
}
class B:A
{
new public fun1()
{
....
}
}
A的fun1,明白了么?
public class BaseC
{
public int x;
public void Invoke() {}
}
public class DerivedC : BaseC
{
new public void Invoke() {}
}
在此示例中,DerivedC.Invoke 隐藏了 BaseC.Invoke。字段 x 不受影响,因为它没有被类似名称的字段隐藏。
详细的看msdn,http://msdn2.microsoft.com/zh-cn/library/435f1dw2(VS.80).aspx
A b=new B();
B.fun1();//实际上是调用了父的方法
((A)B).fun1();//调用子类的方法而使用override覆盖的话,以上2行都是调用子类的方法
Thanks!
你说得没有错,
B xxx=new B();xxx.fun1()就会调用B的fun1而不是A的fun1
但是即使没有使用new标识符,也是调用了B得fun1
例如:
class A {
public void fun1()
{
System.Console.WriteLine("class A:fun1");
}}class B :A
{
public void fun1() { System.Console.WriteLine("class B:fun1");
}
}
class test {
public static void Main()
{
B b = new B();
b.fun1();
}
}无论class B得fun1是否使用了new修饰符,最后都是输出
class B:fun1
估计你可以参考一下xyh2002(凌) 的说法
A b=new B();
B.fun1();//实际上是调用了父的方法
((A)B).fun1();//调用子类的方法而使用override覆盖的话,以上2行都是调用子类的方法----------------------
不好意思,小写的b写成大写了~~~
A b=new B();
b.fun1();
((A)b).fun1();