所以我查看了许多相关的问题,但似乎没有一个完全适合。至少在我目前的理解中不是。由于这是一个简单的问题,我将用我的问题和代码简洁。
我有五个班级:
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] 删除。
我来说两句