提问人:LonelySemiColon 提问时间:7/20/2023 最后编辑:LonelySemiColon 更新时间:7/20/2023 访问量:34
在实现接口的类中使用 Interface 的默认字段的值
Using the value of a default field of Interface inside the classes that implement the interface
问:
我有一个,我正试图在里面有一个。
所以我试了一下:interface
default property
public interface IMyInterface
{
string DoSomething();
MySpecialClass ClassData {get => new ClassData(); set{} }
}
然后我有一堆实现这个,但是对于实现它的每个类来说,该字段没有什么特别之处,所以我不想在每个未来的类中继续复制粘贴它,这就是为什么我试图在界面中做它的默认实现。classes
interface
ClassData
但是,在某些具体类中,我可能希望实际使用该字段的值。所以我的问题是我该怎么做? 例如:
SomeClass s = new SomeClass();
s.ClassData = "some data I want to use later maybe...";
public class SomeClass: IMyInterface
{
public string DoSomething()
{
// Here I want to have access to that field ClassData from the interface so I can do things to it.
}
}
我的**问题是,我无法访问该接口的实现,无法使用我刚刚在上面设置的默认属性值。我怎样才能实现这样的事情?
我也试过打电话给它,但没有运气。this
答:
若要在不重写该方法的类型上调用默认接口方法(或 here 属性),必须首先强制转换为接口类型:。((IMyInterface)this).ClassData
但是,如果重写该属性,则无法再访问该类上的默认实现。这就是为什么文档建议引入一个始终能够提供默认版本的版本,即使在默认版本被覆盖后也是如此:https://learn.microsoft.com/en-us/dotnet/csharp/advanced-topics/interface-implementation/default-interface-methods-versions#extend-the-default-implementationprotected static
请注意,DIM 并不是真正“打算”用于此类场景,而是真正旨在提供一种在不破坏与旧实现兼容性的情况下向接口添加方法的方法。建议要么为此使用抽象类,要么如果这不是一个选项,则在接口上使用静态方法。
评论