【发布时间】:2020-03-30 18:49:20
【问题描述】:
嗨(再次提出哲学问题),
有一个 private static 方法无法访问实例字段,就我的阅读而言,这些方法提供了一点性能改进。
将方法标记为静态后,编译器将发出 这些成员的非虚拟呼叫站点。发出非虚拟呼叫 站点将阻止在运行时对每个调用进行检查,以确保 当前对象指针非空。这可能会导致 性能敏感代码的可衡量的性能增益。在一些 情况下,访问当前对象实例失败代表一个 正确性问题。
FxCop
那么既然我们可以在private static方法参数中放置一个实例字段,为什么还要使用普通的private方法呢?这不是效率低吗?
只是为了形象化我的意思:
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);
}
}
现在有两种实现IsGoodKey的方法:
public bool IsGoodKey()
{
return ValidateKeyStatic(_key);
}
还有
public bool IsGoodKey()
{
return ValidateKey();
}
为什么不总是使用private static?
【问题讨论】:
-
您为改变您的状态所做的任何操作都必须是公开的,并且不会采用与参数相同的类型。通常我们将类中的辅助方法用作私有静态或公共静态,以便为了获取新对象或进行某些操作,我不需要在不知道其依赖关系的情况下新建整个对象。希望这能澄清你的问题。
-
@Saravanan:“你为改变你的状态所做的任何操作都必须是公开的”这根本不是真的。同样“并且不会采用与参数相同的类型” - 嗯,它可能。例如,您可以有一种方法将属性从一个对象复制到另一个对象。
-
@JonSkeet,你说得对,我想说它应该是非静态的,但应该是公开的
标签: c#