当我使用stepinto时,公共方法“ NyBok”起作用了,并且将我想要的内容添加到列表中,但是当我尝试使用VisaBöcker()
显示列表时,该列表为空。
{
class Bibliotikarie
{
private List<Bok> Böcker = new List<Bok>();
public static void VisaBöcker()
{
var gg = new Bibliotikarie();
foreach (Bok item in gg.Böcker)
{
Console.WriteLine();
Console.WriteLine("\"" + item.Titel + "\" av " + item.Skribent + ". År " + item.UtÅr + ". ( " + item.Typ + " )");
Console.WriteLine();
}
public static void NyBok()
{
var gg = new Bibliotikarie();
gg.Böcker.Add(new Roman(TitSvar, FörSvar, ÅrSvar));
}
}
class Bok
{
public string Titel;
public string Skribent;
public string Typ;
public int UtÅr;
}
class Roman : Bok
{
public Roman(string _Titel, string _Skribent, int _UtÅr)
{
Titel = _Titel;
Skribent = _Skribent;
UtÅr = _UtÅr;
base.Typ = "Roman";
}
(
NyBok()
的代码缩短了,因为它对于瑞典语用户来说是很多不必要的代码。) 最佳答案
在NyBok中,您将创建Bibliotikarie类的新实例,然后将项目添加到其Böcker变量中。您只能这样做是因为Roman类在Bibliotikarie类的内部,否则是Böcker私有变量,您不能在Bibliotikarie类的外部使用它。
但是,在该方法中创建的gg变量是局部变量,当您从该方法退出时,该变量将被丢弃,并且其中的所有内容都会被销毁。
现在,当您调用方法VisaBöcker时,将创建类Bibliotikarie的另一个实例,并且该实例具有一个显然为空的新List。
我会在您的代码中更改很多逻辑。首先,Roman类不应该将项目添加到Bibliotikarie中,而接下来,我将从Bibliotikarie类中提取内部类,并使它们可以由处理Bibliotikarie实例的外部代码访问。
现在我们可以
public class Bibliotikarie
{
private List<Bok> Böcker = new List<Bok>();
// This method adds a Bok instance or a derived one to your list
public void AddBok(Bok b)
{
Böcker.Add(b);
}
public void VisaBöcker()
{
foreach (Bok item in Böcker)
{
Console.WriteLine($"\r\n\"{item.Titel}\" av {item.Skribent}. År {item.UtÅr}. ( {item.Typ} )\r\n");
}
}
}
public class Bok
{
public string Titel;
public string Skribent;
public string Typ;
public int UtÅr;
}
public class Roman : Bok
{
public Roman(string _Titel, string _Skribent, int _UtÅr)
{
Titel = _Titel;
Skribent = _Skribent;
UtÅr = _UtÅr;
base.Typ = "Roman";
}
}
这种结构将允许编写这样的代码
void Main()
{
Bibliotikarie bb = new Bibliotikarie();
bb.AddBok(new Roman("Example1", "Test1", 1));
bb.AddBok(new Roman("Example2", "Test2", 2));
bb.VisaBöcker();
}
现在,您只有Bibliotikarie类的一个实例,将项目添加到该实例,并从包含填充列表的同一实例中显示它们。
关于c# - 如何成功将对象添加到私有(private)列表?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56306432/