Ответ 1
Это означает, что вы не используете членов объекта. Все элементы метода исходят из параметров.
Поэтому метод можно безопасно сделать статическим.
У меня есть метод, показанный ниже, который генерирует предупреждение анализа кода CA1822. CA1822 говорит следующее:
"The 'this parameter (or 'Me' in Visual Basic) of 'ImportForm.ProcessFile(StreamReader)' is never used. Mark the member as static (or Shared in Visual Basic) or use 'this/Me' in the method body or at least one property accessor, if appropriate."
Может ли кто-нибудь сказать мне, почему я получаю это предупреждение, поскольку на самом деле используется параметр "читатель"?
private void ProcessFile(StreamReader reader)
{
string[] lines;
lines = reader.ReadToEnd().Split(new string[] { Environment.NewLine }, StringSplitOptions.None);
ParseFile.IVAFile(lines);
}
Это означает, что вы не используете членов объекта. Все элементы метода исходят из параметров.
Поэтому метод можно безопасно сделать статическим.
"читатель" используется, но вы не используете "this" в любом месте, поэтому вы можете сделать метод статическим.
Единственная причина, почему это не статична, - это если вы хотите позже использовать полиморфизм. делая его виртуальным и переопределяя его в другом месте.
Возможно, я обнаружил вредоносное поведение этого сообщения.
В ситуации типа
void Print()
{
Console.Writeline(GetType().Name);
}
Я получаю это сообщение CA1822
, хотя GetType()
- это метод экземпляра.
Однако я нашел несколько пояснений, почему GetType()
на самом деле не является виртуальным методом, а не методом вместо этого, и технически ведет себя как статический метод.
Это просто, что анализ кода не учитывает это особое поведение.
Я думаю, что он пытается сказать вам, что этот метод можно сделать статическим.
Единственное, что должен получить этот метод, это "читатель", но ничего из экземпляра класса, к которому он принадлежит ("this"). В этом случае вы можете безопасно сделать его статическим.
Предупреждение возникает из-за того, что вы не используете какие-либо переменные-члены этого класса в этом методе. Например.
this.m_anyVariable = anyValue;
Поэтому вы можете/должны пометить этот метод как статический.