我正在做一个小项目,我遇到了这个问题。
项目输出是一个包含接口的库。如果可能的话,我想实现该接口并密封其中的功能:
public interface ITest
{
void SomeMethod();
}
class A : ITest
{
public sealed override SomeMethod()
{
}
}
这个想法是让每个人都可以使用该接口,并有一些专门的类来实现它。例外的是,我想确保如果有人创建 A 类型的专门类,他/她将无法更改该方法的行为。
问题是您不能将“override”关键字放在那里,因为该方法没有在接口中声明为“虚拟”。而且您不能在界面中将其声明为“虚拟”,因为这是不允许的。并且您无法删除“override”关键字,因为“sealed”需要它。
任何解决方法或集思广益的想法都会受到欢迎,但如果有人能想出一个包含界面的解决方案,我会很高兴学习它!
Thanks!
编辑:忘记这个问题!就像 Ani 所说,我忘记了 C# 中的默认方法是密封的。似乎偶尔回到基础知识总是好的......
我可能完全误解了这个问题,但如果你的意图是将方法密封在A
,你可以这样做:
class A : ITest
{
public void SomeMethod() { ... }
}
与 Java 不同,C# 中的方法是密封的默认情况下。的子类A
由于尚未标记,因此无法覆盖该方法virtual
.
另一方面,如果您的目的是在接口中将方法标记为“几乎密封”,以便它forces在实现类上立即密封它,这是不可能的。接口的职责不是(也不应该是)来规定这些实现细节——接口意味着代表一个规格.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)