gpt4 book ai didi

C# Sealed 防止一个方法被派生

转载 作者:行者123 更新时间:2023-11-30 19:25:22 26 4
gpt4 key购买 nike

我试图阻止我的基类派生其方法之一,但似乎不可能以我喜欢的方式进行,我认为我做错了。

你能帮忙吗? :)我真的很想成功使用 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
}

发生的事情是有问题的,关键字 sealed 不允许在第一级派生的方法上使用。我只有一个派生级别,我正在寻找的是避免在 DerivedClass 中派生 MyMethod2。

但是好像不太对:/有什么建议或更正吗?

提前致谢:)

编辑:经过多次评论和午餐暂停后,我将尝试明确我的问题!

我真正想做的是防止我的类(class)使用“她”继承的方法之一。你们中有些人提到使用组合而不是继承,因为我似乎误解了它的意思。

我认为组合只存在于 UML 中,而不存在于代码中。C# 代码中的作曲听起来像什么?

最佳答案

如果这是第一层,除非标记为 virtualabstract,否则它不能被派生类覆盖。

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
}

根据您在下面的评论,您真正想要的似乎是组合,而不是继承;也就是说 DerivedClass 应该能够访问 BaseClass 上的某些功能,但不能以任何方式更改它。对于您的类(class)示例,这可能类似于下面的内容。

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
}
}

关于C# Sealed 防止一个方法被派生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29208598/

26 4 0
文章推荐: c# - 任务并行库 - Task.Delay() 用法
文章推荐: c# - 我可以将 List 用作方法中的形式参数吗?