防止暴露基类(抽象类)

炸玉米饼

所以我查看了许多相关的问题,但似乎没有一个完全适合。至少在我目前的理解中不是。由于这是一个简单的问题,我将用我的问题和代码简洁。

我有五个班级:

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

方法C中使用的参数存在明显的可访问性问题public我需要访问 classD而不暴露 class C我相信这可能是由于abstract关键字的性质以及我使用它的经验很少。

迄今为止,我从未有过创建abstract的已知需求,这是我第一次在这个级别上处理它。根据我的理解,abstract只要我记得正确实现所有内容,在这种情况下就没有必要使用类。


我的问题

  • 我应该创建一个F具有私有实例的类D作为一种包装器来防止暴露吗?
  • 什么是使用的充分理由,abstract因为我不相信这段代码是一个很好的例子。
  • 我可以通过哪些其他方式在D不暴露的情况下暴露A, B, 或C

笔记

  • 我正在尝试对我目前的变化进行外科手术。
  • 最初所有课程都是私人课程。

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

胡安

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

//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);

这是有效的,因为从外部的角度来看,您正在处理公共合同,而不是实际实施。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章