我观察到只要编译器遇到如下的委托声明:
public delegate string StringOperation(string myString);
然后编译器生成以下代码:
public sealed class StringOperation: System.MulticastDelegate
{
public StringOperation (object target, int method);
public virtual void Invoke(string myString);
public virtual IAsyncResult BeginInvoke(string myString,
AsyncCallback callback, object obj);
public virtual void EndInvoke(IAsyncResult result);
}
我的问题是,当类本身是virtual
类时,为什么它会生成sealed
个方法?
创建virtual
方法没有意义,因为我们无法override
他们正确吗?
答案 0 :(得分:0)
我不熟悉框架的这一部分,但是Reflector将此作为BeginInvoke
的定义:
[MethodImpl(0, MethodCodeType=MethodCodeType.Runtime)]
public virtual IAsyncResult BeginInvoke(string myString, AsyncCallback callback, object @object);
我的眼睛被MethodImpl
属性所吸引。 MethodCodeType.Runtime
表示:
指定方法实现由运行时提供。
所以我猜它是virtual
因为运行时会覆盖它的功能。运行时可以轻松传递sealed
类。