2011-01-17 13 views
1

Ich habe eine Situation, in der ich mehrere Klassen habe, die etwas gemeinsam haben und etwas Einzigartiges. Ich möchte eine Klasse erstellen, die stärker typisiert ist als object [], aber eine dieser anderen Klassen enthalten könnte.Wie erstelle ich eine benutzerdefinierte Objekttypklasse in C#?

Wenn ich zum Beispiel:

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

    //Constructors Here 
} 

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

    //Constructors Here 
} 

Ich möchte eine Klasse so etwas wie erstellen:

class MyObject 
{ 
    string common1; 
    string common2; 

    //Code Here 
} 

Damit schaffe ich so etwas wie:

Dictionary<int, MyObject> 

That würde entweder MyType1 oder MyType2 enthalten, aber nicht string oder int oder irgendetwas anderes, das ein Wörterbuch enthalten würde. Die MyObjects, die dort gespeichert sind, müssen später in MyType1 oder MyType2 umformatiert werden können, um auf die darunter liegenden eindeutigen Attribute zuzugreifen.

Auch wäre es wirklich toll, wenn ich auf MyObject.common1 oder MyObject.common2 zugreifen könnte, ohne es neu zu erstellen.

+2

Klingt wie ein guter Plan, aber Sie haben nicht genau eine Frage gestellt. –

+0

Was ist falsch bei der Standardvererbung? – Cameron

+1

Es gibt viele Fragen, die dies bereits in StackOverflow abdecken, zum Beispiel [diese Suche] (http://stackoverflow.com/search?q= [c% 23] + Vererbung + Basis + Klasse). Nehmen Sie sich 10 Minuten Zeit, um eine Auswahl dieser Fragen zu lesen. – slugster

Antwort

14
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 
} 
+0

Nur um diese Antwort hinzuzufügen .... in Betracht ziehen, 'MyObject' so etwas wie' MyBaseObject' zu nennen und darüber nachzudenken, es abstrakt zu machen. – slugster

Verwandte Themen