none
Dynamische Klasse(en) Feste Eigenschaft RRS feed

  • Frage

  • Hallo!

    Ich habe mehere Klassen, in denen ich immer fest eine Eigenschaft z.B. Tag deklariere:

    public class Person
    {
        ...
    
        public object Tag { get; set; }
    }
    
    
    public class PersonEigenschaft
    {
        ...
        public object Tag { get; set; }
    }

    Beim Durchlaufen dieser hierarisch verbundenen Klassen erhalte ich in einer Objekt-Variablen jeweils eine Instanz dieser Klasse(n).

    Wie kann ich auf die fest deklarierte Eigenschaft zugreifen, obwohl ich die Objekt-Variable nicht in den Ziel-Typ casten kann, da dieser erst zur Laufzeit feststeht???

    string zTag = ((Objekt.GetType()) Objekt).Tag

    Montag, 7. Mai 2018 06:49

Antworten

  • Hi Fred,
    eine einfache Möglichkeit dafür ist ein Interface. Alternativ kann natürlich auch die Vererbung genutzt werden. Zum Interface hier mal eine kleine Demo:

    using System;
    
    namespace ConsoleApp2
    {
      class Program
      {
        static void Main(string[] args)
        {
          var o1 = new Person() { Tag = "Object 1" };
          Test(o1);
          var o2 = new PersonEigenschaft() { Tag = "Object 2" };
          Test(o2);
          Console.ReadKey();
        }
        private static void Test(IPersonTag obj)
        {
          Console.WriteLine(obj.Tag);
        }
        
      }
      public class Person: IPersonTag
      {
    //    ...
    
        public object Tag { get; set; }
      }
    
    
      public class PersonEigenschaft: IPersonTag
      {
    //    ...
        public object Tag { get; set; }
      }
      public interface IPersonTag
      {
        object Tag { get; set; }
      }
    }


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    • Als Antwort markiert perlfred Montag, 7. Mai 2018 07:23
    Montag, 7. Mai 2018 07:04

Alle Antworten

  • Hi Fred,
    eine einfache Möglichkeit dafür ist ein Interface. Alternativ kann natürlich auch die Vererbung genutzt werden. Zum Interface hier mal eine kleine Demo:

    using System;
    
    namespace ConsoleApp2
    {
      class Program
      {
        static void Main(string[] args)
        {
          var o1 = new Person() { Tag = "Object 1" };
          Test(o1);
          var o2 = new PersonEigenschaft() { Tag = "Object 2" };
          Test(o2);
          Console.ReadKey();
        }
        private static void Test(IPersonTag obj)
        {
          Console.WriteLine(obj.Tag);
        }
        
      }
      public class Person: IPersonTag
      {
    //    ...
    
        public object Tag { get; set; }
      }
    
    
      public class PersonEigenschaft: IPersonTag
      {
    //    ...
        public object Tag { get; set; }
      }
      public interface IPersonTag
      {
        object Tag { get; set; }
      }
    }


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    • Als Antwort markiert perlfred Montag, 7. Mai 2018 07:23
    Montag, 7. Mai 2018 07:04
  • Hallo Peter

    Nun habe ich mich auch mal mit Interface's beschäftigt. Ja, das ist genau dass, was ich anwenden kann!!!

    Auf eine Basisklasse hätte ich auch kommen können, aber da hatte ich mich zu sehr auf eine Möglichkeit der Umwandlung der Klassen festgebissen ...  einfach der falsche Ansatz!

    Oder mal mit Goethe:

    Willst du immer weiter schweifen? Sieh das Gute liegt so nah.

    und Fred:

    Musst du mal im Forum fragen, Peter der weis immer Rat!

    Vielen Dank für die Veränderung der/meiner Sichtweise!

    Fred.

    Montag, 7. Mai 2018 12:05