你好(又是哲学问题),
有一种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?
如果性能是全部目的static,那么你当然可以做任何事情 static。但实际上关键字不是关于性能的,而是关于语义的- 即成员是否属于该类(以及所有实例),或者属于特定的您的类的
想象一下您\xc2\xb4d 创建了您的类的多个实例。如果每个实例都有一个_key,那么您肯定需要一个实例字段,而不是static一个。另一方面,如果所有实例共享相同的密钥,您可以将其设置为static当然可以这样做。
毕竟性能只是关键字的副作用,你永远不应该应该根据纯粹的性能考虑来做出设计决策。
\n| 归档时间: |
|
| 查看次数: |
1024 次 |
| 最近记录: |