我有一个名为
MyClass.cs
的公共类。它有3个方法: public class MyClass
{
public IEnumerable<MyDto> PublicA(bool useCache = true)
{
//Call an external resource
//some code
}
public IEnumerable<AnotherDto> PublicB()
{
//some code
var x= MyPrivateMethod(input);
//some code
}
private IEnumerable<AnotherDto> MyPrivateMethod(IEnumerable<SomeDto>)
{
//return Mapped data from IEnumerable<SomeDto> to IEnumerable<AnotherDto>
}
}
我使用ReSharper作为重构工具。它建议对MyPrivateMethod
使用static
关键字。
private static IEnumerable<AnotherDto> MyPrivateMethod(IEnumerable<SomeDto>)
但是这个关键字的作用是什么呢?由于这个方法是私有的,不会被想要使用MyClass实例的其他类使用。
我进行了测试并发现,当我使用static关键字为MyPrivateMethod
时,我无法调用该类中非私有静态方法。但是我仍然不知道这有什么用处?例如,是否有存储或时间优化的好处?
MyClass
都没有关联。一般来说,如果一个方法在逻辑上与特定实例无关,则将其声明为静态方法可以更加清晰地表达这个意思。同时,这也意味着你可以从其他静态方法中调用它,而不必获取实例的引用。 - Jon Skeetprivate static
方法可以访问类中的任何其他静态方法,无论它们是否为私有。 - JLRisheMyPrivateMethod
来在类的其他方法之间共享代码,注意到该方法当前未访问任何非静态方法或字段,并建议将static
添加到其声明中。它试图猜测您意图创建一个“帮助方法”,而不是驱动您的决策。 - Sergey Kalinichenkoprivate static
方法可以调用类中的任何其他静态方法。请参见此处:https://ideone.com/ijLhEr - JLRishepublic
还是private
,static
都是静态的。你误解了static
,在static
方法中不能调用任何非静态方法。链接 - Aria