Как создать собственный класс типа объекта в C #? - PullRequest
1 голос
/ 17 января 2011

У меня есть ситуация, когда у меня есть несколько классов, которые имеют что-то общее, а что-то уникальное. Я хотел бы создать класс, который более строго типизирован, чем object [], но может содержать любой из этих других классов.

Если у меня есть например:

class MyType1
{
   string common1;
   string common2;
   string type1unique1;
   string type1unique2;

   //Constructors Here 
}

class MyType2
{
   string common1;
   string common2;
   string type2unique1;
   string type2unique2;

   //Constructors Here 
}

Я хотел бы создать что-то вроде:

class MyObject
{
   string common1;
   string common2;

   //Code Here 
}

Так что я создаю что-то вроде:

Dictionary<int, MyObject>

Это будет содержать MyType1 или MyType2, но не string или int, или что-нибудь еще, что будет содержать словарь. MyObjects, которые хранятся там, должны иметь возможность быть позже преобразованными в MyType1 или MyType2, чтобы получить доступ к уникальным атрибутам внизу.

Также было бы здорово, если бы я мог получить доступ к MyObject.common1 или MyObject.common2, не переписывая его.

1 Ответ

14 голосов
/ 17 января 2011
public abstract class MyObject {
 protected string common1; 
 protected string common2;
}

public class MyType1 : MyObject {
 string type1unique1; 
 string type1unique2;
}

public class MyType2 : MyObject {
 string type2unique1; 
 string type2unique2;
}

IDictionary<int, MyObject> objects = new Dictionary<int, MyObject>();
objects[1] = new MyType1();
objects[1].common1
if(objects[1] is MyType1) {
    ((MyType1)objects[1]).type1unique1
}
...