Fik*_*wix 2 c# inheritance sealed
我试图阻止我的基类派生它的方法之一,但似乎不可能按照我喜欢的方式来做,我认为我做错了。
你能帮忙吗?:) 我真的很想成功使用sealed 关键字!
这是一些代码:
public class BaseClass
{
public void MyMethod1(string input)
{
// Doing stuff here
}
public sealed void MyMethod2(string input)
{
// Doing stuff here
}
}
public class DerivedClass : BaseClass
{
// Other fields and stuff over there
}
Run Code Online (Sandbox Code Playgroud)
发生的事情是有问题的,在第一级派生的方法上不允许使用关键字sealed。我只有一个派生级别,我正在寻找的是避免在 DerivedClass 中派生 MyMethod2。
但这似乎不太好:/有什么建议或更正吗?
提前致谢 :)
编辑:经过多次评论和午餐暂停后,我将尝试明确我的问题!
我真正想做的是阻止我的班级使用“她”继承的方法之一。你们中有些人提到使用组合而不是继承,因为我似乎误解了它的含义。
我认为组合只存在于 UML 中而不存在于代码中。C# 代码中的组合听起来像什么?
如果这是第一级,除非标记virtual或 ,否则派生类不能覆盖它abstract。
public class BaseClass
{
public virtual void MyMethod1(string input)
{
// Doing stuff here
}
public void MyMethod2(string input)
{
// Doing stuff here
}
}
public class DerivedClass : BaseClass
{
public override void MyMethod1(string input){..}
/// MyMethod2 is not overridable
}
Run Code Online (Sandbox Code Playgroud)
根据您下面的评论,您真正想要的是组合,而不是继承;也就是说,DerivedClass应该能够访问某些功能,BaseClass但不应该以任何方式对其进行更改。对于您的类示例,这可能如下所示。
public class CompositeFunctionality
{
public void MyMethod1(string input)
{
// Doing stuff here
}
}
public class BaseClass
{
private CompositeFunctionality composite = new CompositeFunctionality();
public void MyMethod2(string input)
{
// this is accessible in the base class
composite.MyMethod1();
}
}
public class DerivedClass : BaseClass
{
public void MyMethod3(string input)
{
// do whatever you want
// but composite is not accessible here
}
}
Run Code Online (Sandbox Code Playgroud)