c#编译器错误CS1061由泛型方法

本文关键字:泛型方法 CS1061 错误 编译器 | 更新日期: 2023-09-27 18:05:41

我有一个通用的List-Class,我想使用我的方法CorrectData()从这个类。目前,我已经将方法CorrectData()实现到类loadlist中。如果我把它放入泛型列表,那么我得到一个编译器错误CS1061。

什么错了吗?

谢谢史蒂芬

using System.Collections.ObjectModel;
namespace WindowsFormsGenerics
{
    /// <summary>Basisklasse für alle Elemente </summary>
    public class Base
    {
        /// <summary> Elementname </summary>
        public string Name { get; set; }
        /// <summary> Beschreibung </summary>
        public string Description { get; set; }
    }
    public class Knoten : Base { }
    public class OneNodeElement : Base
    {
        /// <summary> KnotenOne des Elementes </summary>
        public Knoten KnotenOne { get; set; }
        /// <summary> Schaltzustand am KnotenOne </summary>
        public bool SwitchOne { get; set; }
    }
    public class Load : OneNodeElement
    {
        public void CorrectData(){}
    }
    public sealed class LoadListe : Liste<Load>
    {
        public void CorrectData()
        {
            foreach (Load item in this)
            {
                item.CorrectData();
            }
        }
    }
    public abstract class Liste<T> : Collection<T> where T : Base
    {
        public T GetItem(string searchsString, string parameter = "NAME")
        {
            return null;
        }
        public void CorrectData()
        {
            foreach (T item in this)
            {
                item.CorrectData();
            }
        }
    }
} 

c#编译器错误CS1061由泛型方法

您定义了where T : Base,然后希望在该类型的项上调用CorrectData()。此方法在Base类中不实现。

这个方法是在Load类中实现的,所以你可以使用where T: Load来代替,或者在Base类中添加CorrectData()方法。

您缺少CorrectData实现或至少在Base类中定义。您可以这样定义您的Base类:

public class Base
{
    /// <summary> Elementname </summary>
    public string Name { get; set; }
    /// <summary> Beschreibung </summary>
    public string Description { get; set; }
    public virtual void CorrectData() { }
}

然后重写CorrectData方法在后代,像这样:

public class Load : OneNodeElement
{
    public override void CorrectData() { }
}