比类更易于访问的方法
本文关键字:方法 访问 易于 | 更新日期: 2023-09-27 17:56:54
密封
类中的方法比类本身具有更大的可访问性是否合理。当然只是不考虑以后的重构...
例
class SomeClass
{
public void SomeMethod()
{
...
}
}
(我的答案仅适用于 C#)
当然可以有用!
原因一:
访问修饰符不能全部按顺序排列。
你会说protected
比internal
更容易访问,还是更少?
原因2:
重写 bace 类方法和实现接口:
internal sealed class MyClass
{
public override string ToString()
{
return "How would you do this without public methods?";
}
}
现在,通过将 MyClass 强制转换为对象,该方法可以在程序集外部公开。
此模式通常在实现 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?";
}
}
如果类实现公共接口,则可能有理由这样做。然后,工厂(与 SomeClass 位于同一包中)可以实例化该类并将其返回给用户(使用该接口的用户)
编辑:我的答案是在Java中如何工作的上下文中。
这是
实现工厂模式的一种相当常见的方法(我在这里从java的角度说话,但我想c#也是如此)
为公共类提供返回实现公共接口的对象实例的公共工厂方法。
提供工厂返回的公共接口的非公共实现。
客户端可以通过调用工厂 methid 来获取接口的实例,但不能直接实例化它们(通过使用 new
运算符)
所以,是的 - 这是一件合理的事情。
有什么用?如果您无权访问该类,您将如何访问这些方法?
不知道在静态类上是否有意义,但我对此表示怀疑。
我会说,"不",主要是基于KISS-不要为你不需要的东西编码。 如果在程序集外部不需要该方法,则将其设置为内部。
若要实例化内部类,必须先实例化外部类。然后,在外部对象中创建内部对象。
所以,它看起来不是很合理。