gpt4 book ai didi

c# - 使用用作 protected 字段的内部类型

转载 作者:太空狗 更新时间:2023-10-29 20:31:17 24 4
gpt4 key购买 nike

我有一个类库,其中包含 2 个从抽象类继承的公共(public)类。在抽象类上,我有一个 protected 字段,只能由继承的类访问。该字段使用的类型是内部类。

例如我有:

internal class MyInternalClass
{
...
}

public abstract class MyAbstractClass
{
protected MyInternalClass myField;
}

现在我明白这是行不通的,因为如果从 MyAbstract 类派生的类之一扩展到程序集之外,则对 myField 的访问将是非法的。

我的问题是如何在保持 MyInternalClass 内部(它不应该在程序集外部访问)并允许程序集中的类扩展 MyAbstractClass 以访问 myField 的同时让事情正常进行?

最佳答案

创建一个公共(public)接口(interface),MyAbstractClass 需要并且 MyInternalClass 实现。

这样的东西,所以你可以让它默认为 MyInternalClass 但如果你需要的话可以注入(inject)新的行为(例如,模拟):

internal class MyInternalClass : IMyInterface
{
}

public interface IMyInterface
{
}

public abstract class MyAbstractClass
{
protected IMyInterface myField;

protected MyAbstractClass(IMyInterface required = null)
{
myField = required ?? new MyInternalClass();
}
}

关于c# - 使用用作 protected 字段的内部类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12502358/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com