none
property generiert eine Klasse RRS feed

  • Frage

  • hallo

    Wenn ich in meiner Klasse "MyClass" eine Eigenschaft definiere wie z.B. das da

      private MyObject MyProperties { get; set; }

    ... dann kann ich danach "await MyProperties.GetMyClassPropertiesAsync()" aufrufen. Offensichtlich wird da eine interne Klasse gebaut, die das ermöglicht. Kann jemand was zu diesem Mechanismus sagen? Ich sehe das zum ersten mal. Wozu soll das gut sein?

    Rudolf

    Donnerstag, 24. Oktober 2019 19:14

Antworten

  • Hi Rudolf,
    da wird keine interne Klasse gebaut. Diese Methode (GetMyClassPropertyAsync) ist in der Klasse MyObject enthalten. Diese müsste Du Dir mal anschauen. Hier mal eine kleine Konsolen-Demo zur Veranschaulichung:

    using System;
    using System.Threading.Tasks;
    
    namespace ConsoleApp1
    {
      class Program1
      {
        [STAThread]
        static void Main(string[] args)
        {
          try
          {
            (new Demo()).Execute();
          }
          catch (Exception ex) { Console.WriteLine(ex.ToString()); }
          Console.WriteLine("Continue enter key");
          Console.ReadKey();
        }
    
        internal class Demo
        {
          internal async void Execute()
          {
            MyClass c = new MyClass();
            await c.MyProperties.GetMyClassPropertiesAsync();
          }
        }
    
        internal class MyClass
        {
          public MyClass() => MyProperties = new MyObject();
    
          internal MyObject MyProperties { get; set; }
        }
    
        internal class MyObject
        {
          internal Task GetMyClassPropertiesAsync()
          {
            return Task.Delay(1000);
          }
        }
      }
    }


    --
    Best Regards / Viele Grüße
    Peter Fleischer (former MVP for Developer Technologies)
    Homepage, Tipps, Tricks


    Freitag, 25. Oktober 2019 06:24

Alle Antworten

  • Hi Rudolf,
    da wird keine interne Klasse gebaut. Diese Methode (GetMyClassPropertyAsync) ist in der Klasse MyObject enthalten. Diese müsste Du Dir mal anschauen. Hier mal eine kleine Konsolen-Demo zur Veranschaulichung:

    using System;
    using System.Threading.Tasks;
    
    namespace ConsoleApp1
    {
      class Program1
      {
        [STAThread]
        static void Main(string[] args)
        {
          try
          {
            (new Demo()).Execute();
          }
          catch (Exception ex) { Console.WriteLine(ex.ToString()); }
          Console.WriteLine("Continue enter key");
          Console.ReadKey();
        }
    
        internal class Demo
        {
          internal async void Execute()
          {
            MyClass c = new MyClass();
            await c.MyProperties.GetMyClassPropertiesAsync();
          }
        }
    
        internal class MyClass
        {
          public MyClass() => MyProperties = new MyObject();
    
          internal MyObject MyProperties { get; set; }
        }
    
        internal class MyObject
        {
          internal Task GetMyClassPropertiesAsync()
          {
            return Task.Delay(1000);
          }
        }
      }
    }


    --
    Best Regards / Viele Grüße
    Peter Fleischer (former MVP for Developer Technologies)
    Homepage, Tipps, Tricks


    Freitag, 25. Oktober 2019 06:24
  • Ah nein... sorry... hab's erst jetzt gesehen... die ganze Klasse wurde aus einer XAML-Datei generiert. Ich dachte zuerst, da würde was während dem Compilieren generiert... ist aber nicht so.

    Jetzt bleibt nur noch die Frage, ob man statt C# auch C++/CLI bauen lassen könnte von dem XAML-Compiler... ist aber wohl ein anderes Problem.

    danke

    Freitag, 25. Oktober 2019 08:55
  • Hi,

    jetzt bleibt nur noch die Frage, ob man statt C# auch C++/CLI bauen lassen könnte von dem XAML-Compiler... ist aber wohl ein anderes Problem.

    in einem C# Projekt wohl eher nicht. In einem C++ Projekt evtl. schon, falls es da auch das gibt, was Du da tust (was auch immer das sein mag).

    die ganze Klasse wurde aus einer XAML-Datei generiert

    Von wem oder von was?

     


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Freitag, 25. Oktober 2019 12:10
    Moderator
  • die ganze Klasse wurde aus einer XAML-Datei generiert

    Von wem oder von was?

    Tja, das ist eine gute Frage... Visual Studio versteckt das immer so schön. Offenbar vom 'XamlIntelliSenseFileGenerator' beim Buildvorgang 'XamlPropertyRule'.

    Und ob's das auch für C++/CLI gibt oder was das überhaupt ist... das ist so ähnlich wie bei ATL. Tausende von Templates, die ineinander greifen, am Ende versteht man nichts mehr und wenn man was ändern will am Konstrukt (weil z.B. ein Interface nicht vorgesehen war von dem, der diese ATL Sache gebaut hat), dann wühlt man sich durch Code, dass es einem schwindlig wird. Nur um rauszufinden, dass am Ende der ganze Code zusammengekürzt wird auf 5 Zeilen und man es wohl besser gleich von Hand gemacht hätte.

    Ich sag ja nicht, dass man es nicht versuchen soll, solche Frameworks oder Hilfen zu bauen. Aber der resultierende Code ist fast immer einfach nicht mehr zu durchschauen und sobald etwas dazukommt, bei dem man von Hand was einfügen muss in ein Projekt, das total mit generiertem Code und Projektvorlagen und Frameworks gebaut wurde... dann bricht das ganze Kartenhaus zusammen. Die Idee solcher Sachen wäre ja, dass man nicht alles bis ins Detail verstehen muss und dass es einem Zeit spart. Aber in solchen Situationen geht das dann nicht mehr... dann muss man nebst der Technologie noch die Lösungsansätze des Frameworks kennenlernen. Damit hat man die doppelte Arbeit... teils ungelöst, diese Probleme, das ist mir klar. Aber solche Versteck-Aktionen mit Tools, die angesteuert werden und wo keiner so recht weiss was es ist und wie es läuft, tragen halt nicht zum Verständnis bei.

    Na ja, egal... ich analysier halt weiter und ... irgendwann geht's dann schon. Ich schmeiss wohl den XAML Teil raus und schreib's von Hand :-) ... ist wohl einfacher.

    Samstag, 26. Oktober 2019 19:19