如何在 C# 中调用基 class 上的显式接口方法?
How do I call an explicit interface method on a base class in C#?
C# 有一个有用的显式接口功能,可以让您创建实现接口的方法,同时避免潜在的名称冲突。
public abstract class BaseClass : IDisposable {
public int Value;
void IDisposable.Dispose() => Value = 1;
}
您甚至可以在 subclasses 中覆盖这些方法,只要 subclass 还明确列出它实现了接口。
public class SubClass : BaseClass, IDisposable {
void IDisposable.Dispose() => Value = 2;
}
static void Main() {
BaseClass obj = new SubClass();
((IDisposable)obj).Dispose();
Console.WriteLine(obj.Value); // 2
}
在子class 中,您通常可以调用base.Whatever
来访问基本class 版本的方法。但是对于显式接口实现,此语法无效。此外,无法将您的基础转换为接口以调用该方法。
如何访问我的基础 class 的显式接口实现中的逻辑?
希望有用:
public abstract class BaseClass : IDisposable
{
public int Value;
void IDisposable.Dispose() => DoSomething();
public void DoSomething() => Value = 1;
}
public class SubClass : BaseClass, IDisposable
{
void IDisposable.Dispose()
{
if (Condition())
DoSomething();
else
DoSomethingElse();
}
void DoSomethingElse() => Value = 2;
private bool Condition()
{
return true;
}
}
C# 有一个有用的显式接口功能,可以让您创建实现接口的方法,同时避免潜在的名称冲突。
public abstract class BaseClass : IDisposable {
public int Value;
void IDisposable.Dispose() => Value = 1;
}
您甚至可以在 subclasses 中覆盖这些方法,只要 subclass 还明确列出它实现了接口。
public class SubClass : BaseClass, IDisposable {
void IDisposable.Dispose() => Value = 2;
}
static void Main() {
BaseClass obj = new SubClass();
((IDisposable)obj).Dispose();
Console.WriteLine(obj.Value); // 2
}
在子class 中,您通常可以调用base.Whatever
来访问基本class 版本的方法。但是对于显式接口实现,此语法无效。此外,无法将您的基础转换为接口以调用该方法。
如何访问我的基础 class 的显式接口实现中的逻辑?
希望有用:
public abstract class BaseClass : IDisposable
{
public int Value;
void IDisposable.Dispose() => DoSomething();
public void DoSomething() => Value = 1;
}
public class SubClass : BaseClass, IDisposable
{
void IDisposable.Dispose()
{
if (Condition())
DoSomething();
else
DoSomethingElse();
}
void DoSomethingElse() => Value = 2;
private bool Condition()
{
return true;
}
}