C#:摘要列表<;字符串>;

C#:摘要列表<;字符串>;,c#,abstract,C#,Abstract,C#: 我想用一个处理字符串列表的方法编写一个抽象类。该列表尚未在此类中实现。 然后,我想编写另一个从抽象类继承并实现字符串列表的类 class AbstractClass { protected abstract List<string> myList; // To be implemented in a child class void ShowList() { foreach (string member in myList)

C#: 我想用一个处理字符串列表的方法编写一个抽象类。该列表尚未在此类中实现。 然后,我想编写另一个从抽象类继承并实现字符串列表的类

class AbstractClass 
{
    protected abstract List<string> myList; // To be implemented in a child class
    void ShowList()
    {
        foreach (string member in myList) 
        {
            Console.WriteLine(member);
        }
    }
}

class HelloWorld : AbstractClass
{
    new private List<String> myList = new List<string>()
    {
        "Hello", "World"
    }; 
}
class抽象类
{
受保护的抽象列表myList;//将在子类中实现
void ShowList()
{
foreach(myList中的字符串成员)
{
控制台写入线(成员);
}
}
}
类HelloWorld:AbstractClass
{
新建私有列表myList=新建列表()
{
“你好”,“世界”
}; 
}
现在C#告诉我“修饰符摘要对字段无效。请尝试改用属性。”
我似乎不了解大局。我只需要一个占位符/对我的基本父类中列表的引用。这是如何做到的?

您的代码有几个问题。这将解决这些问题:

abstract class AbstractClass
{
    protected abstract List<string> MyList { get; set; } // To be implemented in a child class

    void ShowList()
    {
        foreach (string member in MyList)
        {
            Console.WriteLine(member);
        }
    }
}

class HelloWorld : AbstractClass
{
    protected override List<String> MyList { get; set; } = new List<string>()
    {
        "Hello", "World"
    };
}
抽象类抽象类
{
要在子类中实现的受保护抽象列表MyList{get;set;}//
void ShowList()
{
foreach(MyList中的字符串成员)
{
控制台写入线(成员);
}
}
}
类HelloWorld:AbstractClass
{
受保护的覆盖列表MyList{get;set;}=new List()
{
“你好”,“世界”
};
}
问题:

  • 应使用
    抽象类
    声明抽象类
  • 如果要在派生类中重写其功能,则需要使用属性或方法
  • 您正在使用
    new
    关键字。如果要在派生类中派生某些内容,请不要这样做!改用
    替代

    • 您的代码有几个问题。这将解决这些问题:

      abstract class AbstractClass
      {
          protected abstract List<string> MyList { get; set; } // To be implemented in a child class
      
          void ShowList()
          {
              foreach (string member in MyList)
              {
                  Console.WriteLine(member);
              }
          }
      }
      
      class HelloWorld : AbstractClass
      {
          protected override List<String> MyList { get; set; } = new List<string>()
          {
              "Hello", "World"
          };
      }
      
      抽象类抽象类
      {
      要在子类中实现的受保护抽象列表MyList{get;set;}//
      void ShowList()
      {
      foreach(MyList中的字符串成员)
      {
      控制台写入线(成员);
      }
      }
      }
      类HelloWorld:AbstractClass
      {
      受保护的覆盖列表MyList{get;set;}=new List()
      {
      “你好”,“世界”
      };
      }
      
      问题:

      • 应使用
        抽象类
        声明抽象类
      • 如果要在派生类中重写其功能,则需要使用属性或方法
      • 您正在使用
        new
        关键字。如果要在派生类中派生某些内容,请不要这样做!改用
        替代

      检查此链接:字段被视为私有字段。这意味着您不会在继承自基类的类中看到它,因此它无法实现它的字段版本。另一件事是-字段仅用于保存数据,而您不能真正“实现”它们。尝试使用虚拟/抽象属性。为什么需要在派生类中“实现”它。在抽象类中定义字段,然后在派生类中对其进行初始化。检查此链接:字段被认为是私有的。这意味着您不会在继承自基类的类中看到它,因此它无法实现它的字段版本。另一件事是-字段仅用于保存数据,而您不能真正“实现”它们。尝试使用虚拟/抽象属性。为什么需要在派生类中“实现”它。您在抽象类中定义字段,然后在派生类中初始化它。谢谢,但它似乎不起作用。VirtualStudio 2013不接受带有“=新列表…”的“{get;set;}”。如果我删除“{get;set;}”,它会一直说“修改器覆盖对该项无效”。@KommissarFahrner答案是C#6.0语法。好吧,但答案对我的理解非常有帮助!谢谢,但它似乎不起作用。VirtualStudio 2013不接受带有“=新列表…”的“{get;set;}”。如果我删除“{get;set;}”,它会一直说“修改器覆盖对该项无效”。@KommissarFahrner答案是C#6.0语法。好吧,但答案对我的理解非常有帮助!