私有静态和私有方法的困境

Paw*_*wel 2 c#

你好(又是哲学问题),

有一种private static方法无法访问实例字段,就我的阅读而言,这些方法提供了一点性能改进。

将方法标记为静态后,编译器将向这些成员发出非虚拟调用站点。发出非虚拟调用站点将阻止在运行时对每个调用进行检查,以确保当前对象指针不为空。这可以为性能敏感的代码带来可测量的性能增益。在某些情况下,无法访问当前对象实例代表正确性问题。

福克斯警察

那么当我们可以在方法参数private中放置实例字段时,为什么还要使用普通方法呢?private static这不是效率低下吗?

只是为了形象化我的意思:

public class A
{
    private readonly string _key = "ssss";

    public bool IsGoodKey()
    {
    }

    private static bool ValidateKeyStatic(string key)
    {
        return string.IsNullOrEmpty(key);
    }
    private bool ValidateKey()
    {
        return string.IsNullOrEmpty(_key);
    }
}
Run Code Online (Sandbox Code Playgroud)

现在有两种实现方式IsGoodKey

    public bool IsGoodKey()
    {
        return ValidateKeyStatic(_key);
    }
Run Code Online (Sandbox Code Playgroud)

    public bool IsGoodKey()
    {
        return ValidateKey();
    }
Run Code Online (Sandbox Code Playgroud)

为什么不总是使用private static

Him*_*ere 5

如果性能是全部目的static,那么你当然可以做任何事情 static。但实际上关键字不是关于性能的,而是关于语义的- 即成员是否属于该类以及所有实例),或者属于特定的您的类的

\n\n

想象一下您\xc2\xb4d 创建了您的类的多个实例。如果每个实例都有一个_key,那么您肯定需要一个实例字段,而不是static一个。另一方面,如果所有实例共享相同的密钥,您可以将其设置为static当然可以这样做。

\n\n

毕竟性能只是关键字的副作用,你永远不应该应该根据纯粹的性能考虑来做出设计决策。

\n