在密封类中使用比类本身更具可访问性的方法是否合理。 当然,不考虑以后的重构......
实施例
class SomeClass
{
public void SomeMethod()
{
...
}
}
答案 0 :(得分:1)
如果类实现了一个公共接口,那么可能有理由这样做。然后,工厂(与SomeClass在同一个包中)可以实例化该类并将其返回给用户(使用该接口)
编辑:我的回答是在Java如何工作的背景下。
答案 1 :(得分:1)
(我的答案仅适用于C#)
当然它很有用!
原因1:
访问修饰符不能全部按顺序排列。
您是否认为protected
比internal
更容易访问,或者更少?
原因2:
覆盖bace类方法并实现接口:
internal sealed class MyClass
{
public override string ToString()
{
return "How would you do this without public methods?";
}
}
现在通过将MyClass强制转换为Object,该方法可以在集合之外公开。
实现IEnumerator时经常使用此模式。真正的班级通常是私人的(甚至不是内部的)。
原因3:
访问私有嵌套类:
public class A
{
public string TellMeWhy()
{
return B.TheReason;
}
sealed private class B
{
internal static string TheReason =
"How would you access any of these members " +
"if they all have to be private?";
}
}
答案 2 :(得分:1)
这是实现工厂模式的一种相当常见的方式(我在这里从java的角度讲,但我猜c#也是如此)
为公共类提供一个公共工厂方法,返回实现公共接口的对象实例。
提供工厂返回的公共接口的非公共实现。
客户端可以通过调用工厂的methid来获取接口的实例,但不能直接实例化它们(使用new
运算符)
所以,是的 - 这是合理的事情。
答案 3 :(得分:0)
有什么用?如果您无法访问该类,您将如何访问这些方法?
不知道静态类是否有意义,但我对此表示怀疑。
答案 4 :(得分:0)
我会说'不',主要是基于KISS-不为你不需要的东西编码。如果在程序集外部不需要该方法,则将其设置为内部。
答案 5 :(得分:0)
要实例化内部类,必须首先实例化外部类。然后,在外部对象中创建内部对象。
所以,它看起来不太合理。