Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 最后添加的项将替换列表中的所有现有项_C#_List_Inheritance_Interface - Fatal编程技术网

C# 最后添加的项将替换列表中的所有现有项

C# 最后添加的项将替换列表中的所有现有项,c#,list,inheritance,interface,C#,List,Inheritance,Interface,我试图用继承自两个接口(IIndividual和iGardian)的类(Student)填充列表模板。人口数量相当不错。我现在遇到的问题是,最后一个元素替换旧元素并覆盖它们。我很困惑 interface IIndividual { String Name { get; set; } String Number { get; set; } String Address { get; set; } } interface IGuardian { String Nam

我试图用继承自两个接口(IIndividual和iGardian)的类(Student)填充列表模板。人口数量相当不错。我现在遇到的问题是,最后一个元素替换旧元素并覆盖它们。我很困惑

interface IIndividual
{
    String Name { get; set; }
    String Number { get; set; }
    String Address { get; set; }
}

interface IGuardian
{
    String Name { get; set; }
    String Number { get; set; }
    String Address { get; set; }
}

class Student: IIndividual, IGuardian
{
    String IIndividual.Name { get; set; }
    String IIndividual.Number { get; set; }
    String IIndividual.Address { get; set; }
    String IGuardian.Name { get; set; }
    String IGuardian.Number { get; set; }
    String IGuardian.Address { get; set; }

    public void output()//testing
    {
        IIndividual i = this as IIndividual;
        Console.WriteLine("Individual Name = {0}", i.Name);
        Console.WriteLine("Individual Number = {0}", i.Number);
        Console.WriteLine("Individual Address= {0}", i.Address);
        IGuardian g = this as IGuardian;
        Console.WriteLine("Guardian Name = {0}", g.Name);
        Console.WriteLine("Guardian Number = {0}", g.Number);
        Console.WriteLine("Guardian Address= {0}", g.Address);
    }
}


static void Main(string[] args)
{
    List<Student> s = new List<Student>();
    Student ss = new Student();
    IIndividual ii = ss as IIndividual;
    IGuardian gg = ss as IGuardian;
    gg.Name = "Kinyo Yemi";
    gg.Number = "08012345678";
    gg.Address = "Bunker Street";

    ii.Name = "Hope Ajayi";
    ii.Number = "08185543124";
    ii.Address = "Metropolitan Council";
    s.Add(ss);
    /////////////////////
    gg.Name = "Awwal Kadi";
    gg.Number = "08072523245";
    gg.Address = "R32 Damboa";

    ii.Name = "Morak Suleiman";
    ii.Number = "08535755543";
    ii.Address = "Sederal Low Cost";
    s.Add(ss);
    foreach (var x in s)
    {
        x.output();
        Console.WriteLine();
    }
    Console.Read();
}
接口个人
{
字符串名称{get;set;}
字符串编号{get;set;}
字符串地址{get;set;}
}
界面鬣蜥
{
字符串名称{get;set;}
字符串编号{get;set;}
字符串地址{get;set;}
}
班级学生:个人,禽类
{
字符串IIindividual.Name{get;set;}
字符串IIindividual.Number{get;set;}
字符串IIindividual.Address{get;set;}
字符串IGuardian.Name{get;set;}
字符串IGuardian.Number{get;set;}
字符串IGuardian.Address{get;set;}
public void output()//测试
{
个人i=这是个人;
WriteLine(“个人名称={0}”,i.Name);
WriteLine(“个人编号={0}”,i.Number);
WriteLine(“单个地址={0}”,i.Address);
鬣蜥g=此为鬣蜥;
Console.WriteLine(“监护人姓名={0}”,g.Name);
Console.WriteLine(“监护人号={0}”,g.Number);
Console.WriteLine(“监护人地址={0}”,g.Address);
}
}
静态void Main(字符串[]参数)
{
列表s=新列表();
学生ss=新生();
个人ii=作为个人的ss;
鬣蜥gg=ss为鬣蜥;
gg.Name=“Kinyo Yemi”;
gg.Number=“08012345678”;
gg.Address=“邦克街”;
ii.Name=“Hope Ajayi”;
ii.编号=“08185543124”;
ii.地址=“大都会议会”;
s、 添加(ss);
/////////////////////
gg.Name=“Awwal Kadi”;
gg.Number=“08072523245”;
gg.Address=“R32 Damboa”;
ii.Name=“Morak Suleiman”;
ii.Number=“08535755543”;
ii.Address=“Sederal低成本”;
s、 添加(ss);
foreach(变量x在s中)
{
x、 输出();
Console.WriteLine();
}
Console.Read();
}

因为您只创建了一个学生:

但您将其添加到列表中两次:

s.Add(ss);
//...
s.Add(ss);
如果要添加第二个学员,请创建一个新学员:

Student ss2 = new Student();
然后用值填充该对象并将其添加到列表中:

s.Add(ss2);
(甚至只需再次写入
ss=new Student();
即可重新分配相同的变量。)


无论您使用了多少类型更改或变量,如果您只创建了对象的一个实例,那么所有变量都指向同一实例。

因为您只创建了一个学生:

但您将其添加到列表中两次:

s.Add(ss);
//...
s.Add(ss);
如果要添加第二个学员,请创建一个新学员:

Student ss2 = new Student();
然后用值填充该对象并将其添加到列表中:

s.Add(ss2);
(甚至只需再次写入
ss=new Student();
即可重新分配相同的变量。)


无论您使用了多少类型更改或变量,如果您只创建了对象的一个实例,那么您的所有变量都指向同一实例。

您不是在创建新学员,而是在添加同一学员两次

第二个赋值覆盖第一个赋值

在第二个s.add(ss)后插入一个新的“new”(此处标记“///”)

然后重新分配您的接口

static void Main(string[] args)
    {
        List<Student> s = new List<Student>();
        Student ss = new Student();
        IIndividual ii = ss as IIndividual;
        IGuardian gg = ss as IGuardian;
        gg.Name = "Kinyo Yemi";
        gg.Number = "08012345678";
        gg.Address = "Bunker Street";

        ii.Name = "Hope Ajayi";
        ii.Number = "08185543124";
        ii.Address = "Metropolitan Council";
        s.Add(ss);
        ////////**here**/////////////
        ss = new Student();
        ii = ss as IIndividual;
        gg = ss as IGuardian;

        /////////////////////
        gg.Name = "Awwal Kadi";
        gg.Number = "08072523245";
        gg.Address = "R32 Damboa";

        ii.Name = "Morak Suleiman";
        ii.Number = "08535755543";
        ii.Address = "Sederal Low Cost";
        s.Add(ss);
        foreach (var x in s)
        {
            x.output();
            Console.WriteLine();
        }
            Console.Read();
    }
static void Main(字符串[]args)
{
列表s=新列表();
学生ss=新生();
个人ii=作为个人的ss;
鬣蜥gg=ss为鬣蜥;
gg.Name=“Kinyo Yemi”;
gg.Number=“08012345678”;
gg.Address=“邦克街”;
ii.Name=“Hope Ajayi”;
ii.编号=“08185543124”;
ii.地址=“大都会议会”;
s、 添加(ss);
////////**这里**/////////////
ss=新生();
ii=作为个体的ss;
gg=作为鬣蜥的ss;
/////////////////////
gg.Name=“Awwal Kadi”;
gg.Number=“08072523245”;
gg.Address=“R32 Damboa”;
ii.Name=“Morak Suleiman”;
ii.Number=“08535755543”;
ii.Address=“Sederal低成本”;
s、 添加(ss);
foreach(变量x在s中)
{
x、 输出();
Console.WriteLine();
}
Console.Read();
}

你不是在培养一个新学生,而是在两次添加同一个学生

第二个赋值覆盖第一个赋值

在第二个s.add(ss)后插入一个新的“new”(此处标记“///”)

然后重新分配您的接口

static void Main(string[] args)
    {
        List<Student> s = new List<Student>();
        Student ss = new Student();
        IIndividual ii = ss as IIndividual;
        IGuardian gg = ss as IGuardian;
        gg.Name = "Kinyo Yemi";
        gg.Number = "08012345678";
        gg.Address = "Bunker Street";

        ii.Name = "Hope Ajayi";
        ii.Number = "08185543124";
        ii.Address = "Metropolitan Council";
        s.Add(ss);
        ////////**here**/////////////
        ss = new Student();
        ii = ss as IIndividual;
        gg = ss as IGuardian;

        /////////////////////
        gg.Name = "Awwal Kadi";
        gg.Number = "08072523245";
        gg.Address = "R32 Damboa";

        ii.Name = "Morak Suleiman";
        ii.Number = "08535755543";
        ii.Address = "Sederal Low Cost";
        s.Add(ss);
        foreach (var x in s)
        {
            x.output();
            Console.WriteLine();
        }
            Console.Read();
    }
static void Main(字符串[]args)
{
列表s=新列表();
学生ss=新生();
个人ii=作为个人的ss;
鬣蜥gg=ss为鬣蜥;
gg.Name=“Kinyo Yemi”;
gg.Number=“08012345678”;
gg.Address=“邦克街”;
ii.Name=“Hope Ajayi”;
ii.编号=“08185543124”;
ii.地址=“大都会议会”;
s、 添加(ss);
////////**这里**/////////////
ss=新生();
ii=作为个体的ss;
gg=作为鬣蜥的ss;
/////////////////////
gg.Name=“Awwal Kadi”;
gg.Number=“08072523245”;
gg.Address=“R32 Damboa”;
ii.Name=“Morak Suleiman”;
ii.Number=“08535755543”;
ii.Address=“Sederal低成本”;
s、 添加(ss);
foreach(变量x在s中)
{
x、 输出();
Console.WriteLine();
}
Console.Read();
}

正如其他人所指出的,您只创建了一个学生对象,因此您当然不会在列表中看到两个学生对象。然而,这里还有更大的问题

你所做的其实有点奇怪
IIndividual
IGuardian
实际上描述了完全相同的事情

interface IIndividual
{
    String Name { get; set; }
    String Number { get; set; }
    String Address { get; set; }
}

interface IGuardian
{
    String Name { get; set; }
    String Number { get; set; }
    String Address { get; set; }
}
奇怪的是,您的
Student
类明确地实现了这两个功能:

class Student: IIndividual, IGuardian
{
    String IIndividual.Name { get; set; }
    String IIndividual.Number { get; set; }
    String IIndividual.Address { get; set; }
    String IGuardian.Name { get; set; }
    String IGuardian.Number { get; set; }
    String IGuardian.Address { get; set; }
}
这样做真的有意义吗