我们可以在c#的方法中同时使用虚拟关键字和新关键字吗?我们可以在c#的方法中同时使用虚拟关键字和新关键字吗?
4
A
回答
7
是的。你会定义一个方法来隐藏父方法,并允许孩子覆盖。这种行为虽然可能有点奇怪。假设您有以下类:
public class A
{
public void DoSomething(){ Console.WriteLine("42!"); }
}
public class B : A
{
public virtual new void DoSomething(){ Console.WriteLine("Not 42!"); }
}
public class C : B
{
public override void DoSomething(){ Console.WriteLine("43!"); }
}
那么你的执行将看起来像:
A a = new A();
A bAsA = new B();
A cAsA = new C();
B b = new B();
B cAsB = new C();
C c = new C();
a.DoSomething(); // 42!
b.DoSomething(); // Not 42!
bAsA.DoSomething(); // 42!
c.DoSomething(); // 43!
cAsB.DoSomething(); // 43!
cAsA.DoSomething(); // 42!
+0
因此,我们可以说“B”方法中的“new”关键字表示类似于“如果实例是由我的特定类型(B)创建的,而不是我的父类型(A)?这只是一个巧合... – funkymushroom 2010-09-13 17:31:51
+1
@funkymushroom不,它的意思是'只有在代码与我的特定类型一起工作时才使用这个实现'注意bAsA说42 !,但实例是B类型/不同的是它是被访问为A类型的东西。 – eglasius 2010-09-13 17:44:09
1
是的,你可以结合两者。
virtual
允许在派生类中
new
允许您隐藏的旧方法重载的方法。
两者是互补的而不是矛盾的。
1
不要犹豫,自己尝试一下,Visual Studio让它变得简单。
class Base {
public virtual void Method() { }
}
class Derived : Base {
public virtual new void Method() { }
}
相关问题
- 1. 在C++中使用虚拟关键字
- 2. 虚拟关键字
- 3. c中的虚拟关键字#
- 4. 我可以在c#.NET中强制使用'this'关键字吗?
- 5. 在ANTLR语法中使用不同的关键字关键字
- 6. C# - 关键字的使用虚拟+倍率与新
- 7. C#虚拟&覆盖关键字
- 8. 新关键字的真实用法隐藏虚拟方法实现? c#
- 9. 在TypeScript中,可以使用没有“新”关键字的类吗?
- 10. 虚拟关键字和库提前
- 11. 我可以重载throw关键字吗?
- 12. 我们可以用Java关键字命名一个类吗?
- 13. 使用super关键字作为方法名称可以吗?
- 14. 我可以在params关键字中使用lambda表达式吗?
- 15. C#方法,使用params关键字
- 16. 使用C#中的新关键字
- 17. 缺少虚拟关键字的警告
- 18. 隐藏方法和“新”关键字
- 19. 可以用非明显的方式使用unsigned关键字吗?
- 20. 我可以在这种情况下使用`Static`关键字吗?
- 21. 我们的关键字何时需要?
- 22. 在PHP中使用关键字和New关键字
- 23. 如何避免虚拟关键字
- 24. 偏差与虚拟关键字
- 25. 虚拟关键字内部组件
- 26. 使用新的关键字
- 27. C中的static关键字可以用来提高性能吗?
- 28. 我们可以有一个虚拟的静态方法吗? (C++)
- 29. 在C++中使用C关键字
- 30. 我可以使用JSON4S hashCode方法作为关键吗?
当你试图声明这样的方法时发生了什么? – dtb 2010-09-13 17:14:37