【发布时间】:2013-10-21 13:50:04
【问题描述】:
假设我有以下 ILAsm 代码:
.class public interface abstract ITest
{
.field public static int32 counter
.method public static void StaticMethod(string str)
{
ldarg.0
call void [mscorlib]System.Console::WriteLine(string)
ret
}
.method public virtual abstract void InstMethod(string) { }
}
是否可以在 C# 中定义一个实现此ITest 接口的类?
我可以在 ILAsm 中实现这个接口:
.class public TestImpl extends [mscorlib]System.Object implements ITest
{
.method public virtual void InstMethod(string str)
{
ldarg.1
call void ITest::StaticMethod(string)
ret
}
.method public specialname rtspecialname instance void .ctor()
{
ldarg.0
call instance void .base::.ctor()
ret
}
}
并在 C# 代码中成功使用实现的类:
var testImpl = new TestImpl();
testImpl.InstMethod("I'm static!");
但是用 C# 实现这个接口呢?
【问题讨论】:
-
真的是界面吗? “.class”不是意味着它是一个类吗?如果它是一个接口,则表明 CLR 允许接口中的成员变量。这对我来说是一个新的。非常好的问题。
-
真的是界面吗?因为它有方法实现。接口中不允许使用静态方法!!!
-
你基本上想在这里建立一个抽象类。
-
@Derek 你不能从多个抽象类继承,所以它(有点)不同
-
这是一个接口,因为使用了
interface关键字,其实现存储在25(0x19) MethodImpl元数据表中。