C# Sealed 防止方法被派生

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# 代码中的组合听起来像什么?

Jam*_*iec 5

如果这是第一级,除非标记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)