Vererbung statischer Attribute
-
Hallo,
die Klasse IField stellt ein abstraktes Spielfeld dar. Von ihr werden konkrete Spielfelder abgeleitet, wie zum Beispiel "Wall" oder "Player". Jedes konkrete Spielfeld soll eine statische ID haben.
public abstract class IField { protected string _picResource; protected static int ID {get; set;} public string PicResource { get { return _picResource; } set { _picResource = value; } } }
public class WallBrick : IField { public WallBrick() { _picResource = "data/wall.png"; ID = 3; } }
Problem:
IField field = map.ReadFromMap(requestedField);
Wie bekomme ich die ID der Klasse von field heraus?
field.ID ist nicht möglich, da ID nicht sichtbar ist.
Danke
-
Du hast schon verstanden wie Statische Felder,Attribute,Member funktionieren oder? Sie gelten Klassenweit, d.h. es gibt nur eine einzige Instanz deiner ID fuer alle IField Klassen. Da gibt es keinen Bezug zu einer Instanz. Mach das ID-Feld nicht statisch sondern eine Membervariable.
-
Ja, ich habe das verstanden. Wenn ich es als Member mache, dann wird aber pro Instanz die Variabel neu angelegt, obwohl sie klassenweit gleich ist. Außerdem möchte ich an manchen Stellen mit Class.ID darauf zugreifen.
-
static member schrieb:
Ja, ich habe das verstanden. Wenn ich es als Member mache, dann wird aber pro Instanz die Variabel neu angelegt, obwohl sie klassenweit gleich ist. Außerdem möchte ich an manchen Stellen mit Class.ID darauf zugreifen.
Und hast du Speicherprobleme oder was ist dein Problem? IField ist deine Basisklasse, das heisst es gibt eine Instanz von ID fuer alle weiteren Klassen, voellig egal ob du davon erbst oder nicht. Mach eine einfache Instanzvariable draus.
-
Wenn du beides möchtest dann benutze:
public abstract class IField { public abstract int ID { get; } }
Und in der konkreten Klasse dann
public class Wall : IField { public const int WallID = 42; public virtual int ID { get { return WallID; }; } }
So kannst du sowohl über Wall.WallID als auch über field.ID darauf zugreifen.
-
Nur so als Idee:
Type.GetHashCode()Ansonsten siehe die anderen Antworten. Die 4 Bytes pro Instanz werden dich kaum stören. Du probierst hier unnötig zu optimieren.
Grüssli