AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein C# Typen / Klassen als Parameter verwenden

Typen / Klassen als Parameter verwenden

Ein Thema von Meflin · begonnen am 22. Aug 2010 · letzter Beitrag vom 30. Aug 2010
Antwort Antwort
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#1

AW: Typen / Klassen als Parameter verwenden

  Alt 22. Aug 2010, 13:34
Ein solches Konstrukt gibt es in C# nicht. Habe ich auch schon vergeblich nach gesucht
Verdammt, das ist schade

für das zweite Beispiel sollte das mit den Generics ausreichend sein, wenn es klappt. Für den ersten hilft das allerdings auch nichts
Leo S.
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.688 Beiträge
 
Delphi 2007 Enterprise
 
#2

AW: Typen / Klassen als Parameter verwenden

  Alt 22. Aug 2010, 16:23
Schau dir mal den Namespace System.Type an, und den Operator typeof().
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von implementation
implementation

Registriert seit: 5. Mai 2008
940 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Typen / Klassen als Parameter verwenden

  Alt 22. Aug 2010, 16:45
Heißt das Namespace nicht System.Reflection?
Das ist aber eigentlich auch keine Entsprechung für class-of, sondern für die RTTI...
Aber damit sollte sich das erste Beispiel bewältigen lassen.
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#4

AW: Typen / Klassen als Parameter verwenden

  Alt 22. Aug 2010, 17:18
Aber damit sollte sich das erste Beispiel bewältigen lassen.
Naja nicht ganz. Zwar kann man damit sowas anlegen:
Code:
Type[] KnownClasses = new Type[] { typeof(ClassA), typeof(ClassB) };
Aber wie komme ich nun vom Type wieder zur Klasse? Ein Eintrag aus dem Array kennt ja nun logischerweise die (statischen) Methoden meiner Klassen nicht (ist ja auch vom Typ Type) und ein cast ist nicht möglich
Code:
foreach (Type t in KnownClasses) {
    // ? t.foo()
}
Leo S.
  Mit Zitat antworten Zitat
Benutzerbild von implementation
implementation

Registriert seit: 5. Mai 2008
940 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Typen / Klassen als Parameter verwenden

  Alt 22. Aug 2010, 17:24
Die Lösung ist eine Methode von System.Type, nämlich InvokeMember
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#6

AW: Typen / Klassen als Parameter verwenden

  Alt 22. Aug 2010, 17:28
Ich denke, ein konkretes Anwendungsbeispiel wäre langsam hilfreich . Von Dependency Injection bis zu Funktionaler Programmierung (Higher-Order-Functions) gibt es manchmal sogar bessere Lösungen als virtuelle statische Methoden.

Eine virtuelle statische Methode direkt umzusetzen, ohne Verlust von statischer Typisierung, wirst du aber nur erreichen, indem du sie zur Instanzmethode machst und dafür ggf. in eine eigene Klasse auslagerst.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von implementation
implementation

Registriert seit: 5. Mai 2008
940 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Typen / Klassen als Parameter verwenden

  Alt 22. Aug 2010, 17:35
Von Dependency Injection bis zu Funktionaler Programmierung (Higher-Order-Functions) gibt es manchmal sogar bessere Lösungen als virtuelle statische Methoden.
In C# gibt es nicht einmal virtuelle statische Methoden
Daher ist das erste Beispiel sowieso Schwachsinn.
Da müsste Microsoft erstmal Delphi's Klassenmethoden abgucken.
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#8

AW: Typen / Klassen als Parameter verwenden

  Alt 22. Aug 2010, 17:38
Ich denke, ein konkretes Anwendungsbeispiel wäre langsam hilfreich .
Nungut... es soll eine Reihe von "Events" verwaltet werden... Im Endeffekt Daten, die über einen Socket empfangen werden. Für jeden möglichen Befehl gibt es eine Unterklasse von
Code:
    abstract class ServerEvent
    {
        public static string command() {
            return "";
        }

        public static void handler() { } 
    }
Alle bekannten Events sollen nun bei einem Dispatcher registriert werden (der ServerEvent.Command aus den TCP Daten liest und dann ServerEvent.handler() passend aufruft).

Mit der im Eingangspost gezeigten Smalltalk-Variante wäre ich da voll zufrieden

Vermutlich gibt es dafür auch völlig andere Lösungsansätze; sollte meine Idee tatsächlich nur schwer umsetzbar sein, werde ich wohl auch umstellen...
Leo S.
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#9

AW: Typen / Klassen als Parameter verwenden

  Alt 22. Aug 2010, 18:00
Nicht so kompliziert denken und einfach Instanzmethoden daraus machen ? Ich sehe da keinen Nachteil - und wie gesagt können sich dadurch sogar ganz andere Möglichkeiten eröffnen :
Code:
   class Dispatcher
   {
      [ImportMany]
      IEnumerable<ServerEvent> EventHandlers { get; set; }

      public Dispatcher()
      {
         // Here be MEF magic...
         var catalog = new DirectoryCatalog(@".\");
         var container = new CompositionContainer(catalog);
         container.Composeparts(this);
      }

      void Receive()
      {
         ServerEvent handler = EventHandlers.First(h => h.Command == command);
         handler.Handle();
      }
   }

   public abstract class ServerEvent
   {
      public virtual string Command { get { return ""; } }
      public void Handle();
   }

   [Export(ServerEvent)]
   class IAmATeapotServerEvent : ServerEvent { ... }
Wirf eine weitere Assembly mit einer ServerEvent-Ableitung in den bin-Ordner und MEF wird sie ohne weiteres Zutun ebenfalls dem Dispatcher zuordnen. Und jetzt sag mir, dass das mit statischen virtuellen Methoden eleganter lösbar sei .
Sebastian
Moderator in der EE

Geändert von Khabarakh (22. Aug 2010 um 18:03 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz