Предупреждение компилятора (уровень 2) CS0280
Обновлен: Ноябрь 2007
Сообщение об ошибке
"тип" не реализует шаблон "имя шаблона". "имя метода" имеет неправильную подпись.
'type' does not implement the 'pattern name' pattern. 'method name' has the wrong signature.
Два оператора C# — foreach и using — основаны на предварительно определенных шаблонах — "collection" и "resource" соответственно. Это предупреждение возникает, если компилятору не удается сопоставить один из этих операторов с его шаблоном из-за неверной подписи метода. Например, для шаблона "collection" требуется наличие метода MoveNext, который не принимает параметров и возвращает значение boolean. В коде может содержаться метод MoveNext, который принимает один параметр или, например, возвращает объект.
В качестве другого примера можно привести шаблон "resource" и оператор using. Для шаблона "resource" требуется метод Dispose; если определить свойство с тем же именем, возникнет это предупреждение.
Чтобы устранить это предупреждение, убедитесь, что подписи методов в типе совпадают с подписями соответствующих методов в шаблоне. Также проверьте, что отсутствуют свойства с тем же именем, что и у метода, который требуется для шаблона.
Пример
Следующий пример приводит к возникновению ошибки CS0280.
// CS0280.cs
using System;
using System.Collections;
public class ValidBase: IEnumerable
{
IEnumerator IEnumerable.GetEnumerator()
{
yield return 0;
}
internal IEnumerator GetEnumerator()
{
yield return 0;
}
}
class Derived : ValidBase
{
// field, not method
new public int GetEnumerator;
}
public class Test
{
public static void Main()
{
foreach (int i in new Derived()) {} // CS0280
}
}