比类更易于访问的方法

本文关键字:方法 访问 易于 | 更新日期: 2023-09-27 17:56:54

密封

类中的方法比类本身具有更大的可访问性是否合理。当然只是不考虑以后的重构...

class SomeClass
{
    public void SomeMethod()
    {
        ...
    }
}

比类更易于访问的方法

(我的答案仅适用于 C#)

当然可以有用!

原因一:

访问修饰符不能全部按顺序排列。

你会说protectedinternal更容易访问,还是更少?

原因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-不要为你不需要的东西编码。 如果在程序集外部不需要该方法,则将其设置为内部。

若要实例化内部类,必须先实例化外部类。然后,在外部对象中创建内部对象。

所以,它看起来不是很合理。