Laden...

Interface-Objekt richtig casten

Erstellt von Freeman4gu vor 13 Jahren Letzter Beitrag vor 13 Jahren 2.160 Views
Freeman4gu Themenstarter:in
71 Beiträge seit 2007
vor 13 Jahren
Interface-Objekt richtig casten

Hallo zusammen,

leider ist der Titel nicht ganz so aussagekräftig, da mir hierzu nichts besseres eingefallen ist.

Zur Sache: Ich habe ein Interface IMessage, aus dem sich 3 Klassen ableite, die allerdings die gleichen Methoden benutzen. Zum Zwecke der Protokollierung erstelle ich beim Update ein 2tes Objekt, das den gleichen Typ wie das zu updatende Objekt bekommen soll.

Mal ein wenig Code fürs bessere Verständnis:


public void method(IMessage message)
{
  IMessage source;
  if(message.getType() == typeof(DefaultMessage))
    source = new DefaultMessage();
  else if(...);

  GetSourceObject(source, message.id);
  UpdateObject(source, message);
}

was mir hierbei nicht gefällt ist das casten per if abweisung, das müsste doch auch irgendwie einfacher möglich sein, oder?

hoffe ihr könnt mir da helfen 😃

Android & WP7 development | Bikube - Projektmanagement und Wiki
http://zero-level-studios.com
http://bikube.de

656 Beiträge seit 2008
vor 13 Jahren

Am schönsten wäre fast, wenn IMessage eine Methode Clone oder CreateNew zur Verfügung stellt, und das jeweilige Objekt es selber macht. Damit hast du keine Probleme, wenn mal neue Klassen dazukommen.

849 Beiträge seit 2006
vor 13 Jahren

Hallo Freeman4gu



public void method(IMessage message)
{
  IMessage source =  Activator.CreateInstance(message.GetType()) as IMessage;

  if(message != null)
  {
    GetSourceObject(source, message.id);
    UpdateObject(source, message);
  }
}


B
198 Beiträge seit 2005
vor 13 Jahren

Du kannst dir über Reflection ein Objekt von dem Typ anlegen.

Type t = typeof(myObject);
Assembly a = Assembly.GetAssembly(t);
AbstractClass newObject = a.CreateInstance(t.FullName);

Anonsten, falls du es in deinem Projekt brauchen kannst, wäre vlt das FACTORY Pattern für dich einsetzbar.

1.044 Beiträge seit 2008
vor 13 Jahren

Hallo Freeman4gu,

warum verwendest du nicht einfach den is-Operator?

zero_x

Freeman4gu Themenstarter:in
71 Beiträge seit 2007
vor 13 Jahren

ok, sieht gut aus 😃 wieder etwas gelernt

vielen dank für die antworten

Android & WP7 development | Bikube - Projektmanagement und Wiki
http://zero-level-studios.com
http://bikube.de