防止基数暴露类(摘要类)

Prevent Exposure of Base Classes (Abstract Classes)

所以我查看了许多相关问题,其中 none 似乎完全符合。至少在我目前的理解中不是。由于这是一个简单的问题,我将简要介绍我的问题和代码。

我有五个 classes:

internal class A
internal abstract class B : A
internal abstract class C : B
public class D : C
public class E {
    public void X(C c) { }
}

public 方法中使用的参数 C 存在明显的可访问性问题。我需要在不暴露 class C 的情况下访问 class D。我认为这可能是由于 abstract 关键字的性质以及我使用它的经验不足所致。

迄今为止,我从未有过创建 abstract class 的已知需求,这是我第一次在这个层面上处理它。根据我的理解,在这种情况下使用 abstract classes 并不是真的有必要,只要我记得正确地实现所有内容即可。


我的问题


备注

我看了很多相关的帖子(这里有一些):

您可以使用界面来隐藏细节。考虑一下:

//This represents the contract, regardless of the underlying object
public interface ISomeObject
{

}

//Class is internal, but implements the interface
internal class A : ISomeObject { }
internal abstract class B : A { }
internal abstract class C : B { }

//Class D is still internal
internal class D : C { }

public class E
{   
    //Method uses interface, which is public     
    public void X(ISomeObject c) { }

    public ISomeObject DoSomething()
    {
        //Create internal class, return it for use (as a contract)
        return new D();
    }
}

示例用法:

var e = new E();
var result = e.DoSomething();
e.X(result);

之所以可行,是因为从外部角度来看,您处理的是 public 合同,而不是实际实施。