C# 8 支持接口中的默认方法实现。我的想法是将日志记录方法注入到这样的类中:
public interface ILoggable {
void Log(string message) => DoSomethingWith(message);
}
public class MyClass : ILoggable {
void MyMethod() {
Log("Using injected logging"); // COMPILER ERROR
}
}
我收到编译器错误:“当前上下文中不存在该名称”
难道就不能用这种方式使用默认方法实现吗?
EDIT:
有关 C# 规则的正确响应,请参阅接受的答案。对于更简洁的解决方案(我的问题的原始想法!)请参阅我的自己的答案 below.
请参阅以下位置的文档:https://learn.microsoft.com/en-us/dotnet/csharp/tutorials/default-interface-members-versions
那个演员来自SampleCustomer
to ICustomer
是必要的。这SampleCustomer
类不需要提供实现ComputeLoyaltyDiscount
;这是由提供的ICustomer
界面。但是,那SampleCustomer
类不从其接口继承成员。这条规则没有改变。为了调用接口中声明和实现的任何方法,变量必须是接口的类型,ICustomer
在这个例子中。
所以方法是这样的
public class MyClass : ILoggable {
void MyMethod() {
ILoggable loggable = this;
loggable.Log("Using injected logging");
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)