Реализация пустого интерфейса для доступа к списку - PullRequest
0 голосов
/ 15 декабря 2011

Ниже приведен код, который я пытался развернуть.Как вы можете видеть, я развертываю пустой интерфейс для создания специального типа данных «mydatatype» для списка «mylist».И в выводе я ожидаю, что назначенные значения будут отображаться.Но я получаю бредовые данные.Может кто-нибудь объяснить?

public class list
{
    interface mydatatype
    {
    }
    public class mystring : mydatatype
    {
        public string mystrings{ get; set; }

    }
    public class myint : mydatatype
    {
        public int myints{ get; set; }
    }
    public class mydouble : mydatatype
    {
        public double mydoubles{ get; set; }
    }
    public static void Main() 
    {


        List<mydatatype> mylist = new List<mydatatype>
            {
                new mystring(),
                new myint(),
                new mydouble(),
            };
        mystring ab = new mystring();
        myint mi = new myint();
        mydouble mf = new mydouble();

        ab.mystrings = "asdf";
        mi.myints = 12;
        mf.mydoubles = 12.223;

        mylist.Add(ab);
        mylist.Add(mi);
        mylist.Add(mf);
        foreach (mydatatype element in mylist)
        {
            Console.WriteLine(element);
        }

        Console.ReadLine();
       } 

    }
}

Ответы [ 3 ]

2 голосов
/ 15 декабря 2011

«бредовые данные» не являются настоящим описанием ошибки ...

Однако здесь происходит то, что Console.WriteLine(element); совпадает с Console.WriteLine(element.ToString());.Поскольку вы не переопределили ToString в своих классах, он выведет имена классов вместо значений.Вы бы сделали это так:

public class mystring : mydatatype
{
    public string mystrings{ get; set; }

    public override string ToString()
    {
        return mystrings;
    }

}
public class myint : mydatatype
{
    public int myints{ get; set; }

    public override string ToString()
    {
        return myints.ToString();
    }
}
public class mydouble : mydatatype
{
    public double mydoubles{ get; set; }

    public override string ToString()
    {
        return mydoubles.ToString();
    }
}
0 голосов
/ 15 декабря 2011

В вашем массиве есть шесть элементов.Три неинициализированных, которые вы вставляете в него во время создания своего списка, и три дополнительных инициализированных, которые вы добавляете после этого.

Отображение каждого элемента в списке вызовет функцию ToString() для каждого элемента, которая по умолчанию является именем типа.

0 голосов
/ 15 декабря 2011

Вы захотите переопределить ToString в каждом из ваших классов для управления выводом.В настоящее время он просто распечатывает имя класса каждого объекта.

Вы инициализируете список с 3 экземплярами ваших различных типов данных, поэтому вы, вероятно, видите эти значения, напечатанные перед теми, которые вы добавили.Я думаю, это то, что вы подразумеваете под «бессмысленными данными».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...