代码分析c#.NET CA1822
我运行代码分析并得到以下消息: CA1822:Microsoft.Performance:中的“this”参数(或“Me”) 从未使用“CreateIntervalString(TimeSpan)”的Visual Basic。做记号 将成员设置为静态(或在Visual Basic中共享)或在中使用“this”/“Me” 方法体或至少一个属性访问器(如果适用) 我的代码是:代码分析c#.NET CA1822,c#,static,code-analysis,C#,Static,Code Analysis,我运行代码分析并得到以下消息: CA1822:Microsoft.Performance:中的“this”参数(或“Me”) 从未使用“CreateIntervalString(TimeSpan)”的Visual Basic。做记号 将成员设置为静态(或在Visual Basic中共享)或在中使用“this”/“Me” 方法体或至少一个属性访问器(如果适用) 我的代码是: private string CreateIntervalString(TimeSpan timeSpan) { r
private string CreateIntervalString(TimeSpan timeSpan)
{
return timeSpan.ToString();
}
据我所知,由于CreateIntervalString
函数不使用类的任何成员,只在timeSpan输入上使用,VisualStudio建议我将其标记为静态
我的问题是:
private string CreateIntervalString(TimeSpan timeSpan)
{
return timeSpan.ToString();
}
但以下情况并非如此:
private DateTime ParseDateString(string dateTimeString)
{
// the years,monthe,days,hours,minutes and secondes found by the dateTimeString input
return new DateTime(years, months, days, hours, minutes, secondes);
}
this
参数),因此从理论上讲,它们的效率更高如果该方法未标记为static,则运行时将对照null检查当前对象(this)。在大多数情况下,可以观察到的差异很小,这是事实,但如果每秒调用数百万次的方法可以通过静态方式获得增益,那么这是值得的。如果性能没有改善,为什么此错误显示为Microsoft.PerformanceError?,而我的函数是private,我只在我的内部类中使用它,所以无论如何,我不应该为了使用它而创建实例…?@RRR:嗯,它必须被归类为某种东西,尽管方法调用本身不会影响性能,但必须创建对象的实例将是一个错误。即使您实际上不需要创建实例来使用该方法,代码分析也不知道这一点,它只能将其规则应用于找到的代码。此外,即使是只在类内部使用的代码,也最好遵循良好的实践。是的,但如果我将方法标记为私有,编译器应该知道我从未在类外部使用过它,也不应该从中创建实例?@RRR:不,这一结论不能仅仅从将方法私有化中得出。您仍然可以有一个使用私有方法的公共静态方法,在这种情况下,它需要创建一个实例来使用它。Microsoft/编译器团队对什么是好的编程模式和软件设计有很强的见解。在这里,我认为遵循一种没有静态方法,只有对象的风格,可以成为良好设计的基石。不,编译器说,请显示从ParseDateString中删除的代码——这可能会提供一个线索,说明为什么没有标记该方法。