Laden...

Methode aus Stringvariable aufrufen

Erstellt von Taucher vor 15 Jahren Letzter Beitrag vor 15 Jahren 4.591 Views
T
Taucher Themenstarter:in
307 Beiträge seit 2008
vor 15 Jahren
Methode aus Stringvariable aufrufen

Hallo Gemeinde,
kann mir jemand sagen wie ich in C# eine Methode aus einer Stringvariablen aufrufen kann?
Da ich von PHP komme kenne ich das nur so:
string methodName = 'myMethod';
$this->methodName();
Das geht aber in C# nicht...

1.346 Beiträge seit 2008
vor 15 Jahren

Als erstes solltest du dir die Frage stellen, ob du das überhaupt brauchst. den meistens ist es Sinnlos, weil man die funktionalität auch ganz anders ereichen kann. Wenn es doch sein muss, geht das mit Reflection. Google mal danach. Das ist aber relativ langsam.

Gruß pdelvo

T
Taucher Themenstarter:in
307 Beiträge seit 2008
vor 15 Jahren

Danke für deine Antwort.
Ja leider muss es sein weil das Eventverhalten bei Asp.Net bei eigenen UserControls meiner Meinung nach nicht besonders Clever geregelt ist. Deshalb hab ich mir eine eigen Klasse für Events geschrieben die die Get-Variablen regelt. Nur der Methodenaufruf selbst fehlt noch.
Und ein if-else bzw switch-konstrukt ist für mich nicht akzeptabel.

691 Beiträge seit 2007
vor 15 Jahren

Wie wärs mit einem Dictionary<string, delegate> ?

Siehe auch: [FAQ] Variablennamen zur Laufzeit zusammensetzen

mit freundlichen Grüßen,
Tomot

Projekte: www.gesellschaftsspieler-gesucht.de

T
Taucher Themenstarter:in
307 Beiträge seit 2008
vor 15 Jahren

Nicht böse sein, aber was willst Du mir jetzt mit dem Dictionary sagen???

691 Beiträge seit 2007
vor 15 Jahren

kann mir jemand sagen wie ich in C# eine Methode aus einer Stringvariablen aufrufen kann?

Methode = delegate
Stringvariable = string
Dictionary mit dem Key vom Typ string, Value vom Typ delegate

Und ein if-else bzw switch-konstrukt ist für mich nicht akzeptabel.

Somit könntest du über den String, an die Methode gelangen.

Oder kannst du mit dem Begriff Dictionary nichts anfangen? Dann :rtfm:

mit freundlichen Grüßen,
Tomot

Projekte: www.gesellschaftsspieler-gesucht.de

S
902 Beiträge seit 2007
vor 15 Jahren

Ja leider muss es sein weil das Eventverhalten bei Asp.Net bei eigenen UserControls meiner Meinung nach nicht besonders Clever geregelt ist.
Und ein if-else bzw switch-konstrukt ist für mich nicht akzeptabel.

Wieso nicht clever gelöst? Da du aus PHO kommst denke ich einfach mal, das du mit "richtigen" kompilierten sprachen nicht so die erfahrung hast, und das mmn nicht clever gelöste vorgehen in php bevorzugst?!

Wieso ist ein if-else nicht akzeptabel, und was hast du eigentlich vor?

mfg
serial

T
Taucher Themenstarter:in
307 Beiträge seit 2008
vor 15 Jahren

Natürlich kann ich mit dem Begriff Dictionary was anfangen, das ist der Bestandteil meiner Parameter in meiner Eventklasse.


serial

Es ist falsch wenn Du denkst das PHP keine richtig kompilierte Sprache ist, den in manchen Punkten ist PHP sogar Typsicherer wie C# z.B. Aber das ist nicht das Thema.
Und warum ich das nicht clever gelöst finde? Ganz einfach, Asp.net hat seinen Lebenszyklus, der ja im normalfall nicht schlecht ist. Jedoch wenn es da um Klassen geht, keine Möglichkeit, zumindest keine normale. Die Events, die werden von Asp gesteuert und man kann die nur ausführen wenn es nach asp möglich ist.
das hat nix mehr mit klassen zu tun, und microsoft macht da ganz klar einschränkungen was den aufbau angeht. und das finde ich schlicht weg falsch. das system was die machen ist ok, aber proffessionell, keine chance...

5.941 Beiträge seit 2005
vor 15 Jahren

Hallo Taucher

Es ist falsch wenn Du denkst das PHP keine richtig kompilierte Sprache ist, den in manchen Punkten ist PHP sogar Typsicherer wie C# z.B. Aber das ist nicht das Thema.

Es ist zwar nicht das Thema, aber dafür hätte ich gerne ein Beispiel.

Und warum ich das nicht clever gelöst finde? Ganz einfach, Asp.net hat seinen Lebenszyklus, der ja im normalfall nicht schlecht ist. Jedoch wenn es da um Klassen geht, keine Möglichkeit, zumindest keine normale.

Was für Möglichkeiten?
Wieso keine normalen?
Wieso "wenn es da um Klassen geht"?

Die Events, die werden von Asp gesteuert und man kann die nur ausführen wenn es nach asp möglich ist.

Nein, wenn du dich an den Zyklus hältst und die Tatsachen nicht verbiegst, rennen die Events immer.
Bei dynamischen Controls hast du da ggf. Probleme, aber mit PHP hast du die genauso.

das hat nix mehr mit klassen zu tun, und microsoft macht da ganz klar einschränkungen was den aufbau angeht. und das finde ich schlicht weg falsch. das system was die machen ist ok, aber proffessionell, keine chance...

Kannst du da mehr ins Detail gehen?
Wieso haben Klassen nichts mehr mit Klassen zu tun?
Du verdienst deine Brötchen mit ASP.NET, sagst jedoch dass das nicht professionell ist?
Wieso ist das "unprofessionelle" ASP.NET denn so erfolgreich? 😃

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

S
902 Beiträge seit 2007
vor 15 Jahren

Hallo,

all die fragen die Peter gestellt hat interessieren mich auch, vorallem wo PHP typsicherer ist.

mfg
serial

T
Taucher Themenstarter:in
307 Beiträge seit 2008
vor 15 Jahren

Hallo Peter, Hallo Serial,
typsicherer ist PHP z.B. wenn es um Objekte geht.
Beispiel:


private void blubb(Object obj)
{
    obj.doAnything();
}

Obwohl klar definiert ist das eine Instanz von Object übergeben werden muss, läßt c# NULL zu, PHP nicht.

Nein, wenn du dich an den Zyklus hältst und die Tatsachen nicht verbiegst, rennen die Events immer.
Bei dynamischen Controls hast du da ggf. Probleme, aber mit PHP hast du die genauso.

Genau das meinte ich. Ich kann mein Event nicht ohne Umwege zu dem Zeitpunkt ausführen wann ich will weil ich an den Lebenszyklus gebunden bin. Nur auf den Request kann ich jederzeit zugreifen(der eigentlich auch das Event ist), und genau deshalb bastel ich mir meine eigene Eventklasse, damit ich unabhängig vom Lebenszyklus bin. Denn der Lebenszyklus kann nicht wissen wann und ob ich mein Event brauche.
Was ich mit den Einschränkungen der Klassen meinte war vielleicht eine Idee übertrieben, aber es ist so dass ich meine Klassen nicht ohne weiteres überall hinlegen kann wo ich will.
Es soll auch nicht falsch verstanden werden, ich finde Microsoft nicht schlecht, jedoch finde ich dass MS den grundsätzlichen Aufbau für dummies macht. Die tiefgehenderen Sachen sind zwar ebenso vorhanden, werden aber meiner Meinung nach vernachlässigter behandelt.

104 Beiträge seit 2004
vor 15 Jahren

Hallo Taucher

Es soll auch nicht falsch verstanden werden, ich finde Microsoft nicht schlecht, jedoch finde ich dass MS den grundsätzlichen Aufbau für dummies macht. Die tiefgehenderen Sachen sind zwar ebenso vorhanden, werden aber meiner Meinung nach vernachlässigter behandelt.

Es ist jetzt nicht böse gemeint, aber ich glaube eher das du nicht verstehst was sich MS dabei gedacht hat und zwanghaft versuchst deine PHP-Welt auf ASP.NET zu übertragen.

Meine ASP.NET-Kenntnisse sind nicht besonders gut, darum kann ich inhaltllich nicht viel dazu sagen, aber ich denke das man mit den verschiedenen Events die einem pro Roundtrip zu Verfügung steht gut auskommen kann. Wenn das nicht der Fall ist, sollte man vielleicht sein Design überdenken.

Was mich zu der Schlussfolgerung bringt: ASP.NET ist weit verbreitet und wird in vielen auch sehr komplexen Webprojekten eingesetzt. Das wäre wohl kaum der Fall wenn man durch ASP.NET irgendwo (sinnlos) eingeschränkt werden würde.

Schöne Grüße, Tachyon

Schaut mal im IRC vorbei:
Server: irc.euirc.net
Channel: #C#

5.941 Beiträge seit 2005
vor 15 Jahren

Hallo Taucher

typsicherer ist PHP z.B. wenn es um Objekte geht.
Beispiel:

  
private void blubb(Object obj)  
{  
    obj.doAnything();  
}  
  

Obwohl klar definiert ist das eine Instanz von Object übergeben werden muss, läßt c# NULL zu, PHP nicht.

Ich habe mich schon länger nicht mehr mit PHP befasst.
Ein nachschlagen im Netz hat jedoch zutage gebracht, dass du wegder einen Parametertyp angeben kannst, noch dass PHP inzwischen stark typisiert ist.
Siehe:

Wenn du mir da was anderes sagen und zeigen kannst, wäre das schon mal was.
Am besten ein Beispiel für deine obige Aussage.

Wie die Links zeigen, gibt es - abgesehen von der schwachen Typisierung - in PHP auch NULL Werte, ja sogar einen NULL-Typ.

Dieser kann laut meiner Lektüre auch dem Typ "Object" zugewiesen werden.
Ich wüsste jetzt keinen Grund warum sich PHP nicht genauso verhalten sollte wie C#.

Genau das meinte ich. Ich kann mein Event nicht ohne Umwege zu dem Zeitpunkt ausführen wann ich will weil ich an den Lebenszyklus gebunden bin.

Jein, du kannst dir auch selber einen Lebenszyklus zusammenschustern, wenn du mit dem bestehenden nicht zurechtkommst.
ASP.NET lässt alles offen, aber die eingebauten Features tun dann ggf. nicht mehr alle so wie du es dir vorstellst.

Generell würde ich auch sagen, dass du praktisch alles umsetzen kannst und wenn du scheiterst, liegt das meistens an einem falschen Design.

Nur auf den Request kann ich jederzeit zugreifen(der eigentlich auch das Event ist), und genau deshalb bastel ich mir meine eigene Eventklasse, damit ich unabhängig vom Lebenszyklus bin. Denn der Lebenszyklus kann nicht wissen wann und ob ich mein Event brauche.

Der Request ist das Event?
Wie sieht denn so eine Eventklasse aus?
Dein letzter Satz verstehe ich leider nicht.

Was ich mit den Einschränkungen der Klassen meinte war vielleicht eine Idee übertrieben, aber es ist so dass ich meine Klassen nicht ohne weiteres überall hinlegen kann wo ich will.

Wie meinst du denn das wieder?
Ich würde eher sagen dass dir dazu das Wissen fehlt, denn mir ist eine solche Einschränkung nicht bekannt.

Es soll auch nicht falsch verstanden werden, ich finde Microsoft nicht schlecht, jedoch finde ich dass MS den grundsätzlichen Aufbau für dummies macht. Die tiefgehenderen Sachen sind zwar ebenso vorhanden, werden aber meiner Meinung nach vernachlässigter behandelt.

Teilweise gebe ich dir Recht, aber auch nur im Sinne dass Microsoft viel Dummyzeugs reingebaut hat und dieses propagandiert.

Dazu zählen bspw. die DataSource-Controls, die vielfältige Designerunterstützung und Assistententen, die anfängliche absolute Positionierung von Elementen auf der Seite.
Also eigentlich alles was mit RAD zu tun hat.

Meinst du das damit?

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

T
Taucher Themenstarter:in
307 Beiträge seit 2008
vor 15 Jahren

Hallo Peter,
ich habe nicht gesagt das PHP stark typisiert ist, sondern teilweise typsicherer ist.
Du kannst in PHP, dessen Funktion oder Methode ein Object oder ein Array erwartet kein NULL zuweisen. Das gibt eine Exception.
Ein Beispiel ist da ja sehr einfach
[php]
class Example
{
public function myExample(Value $val)
{
echo $val->ShowValue();
}
}
class Value
{
public function ShowValue()
{
return CLASS;
}
}
$e = new Example();
$v = new Value();
$e->myExample($v); <--- funktioniert
$e->myExample(null); <--- funktioniert nicht
[/php]
Das selbe ist mit Arrays.

Der Request ist das Event?
Wie sieht denn so eine Eventklasse aus?
Dein letzter Satz verstehe ich leider nicht.

Ja der Request ist das Event, keine Serveranfrage (per GET oder POST) keine reaktion. Man kann ja jetzt auch Spitzfindig sein und sagen das der Request der Auslöser für ein Event ist 😉
Eine solche Klasse die ich mir gebastelt habe ist sehr schlicht und einfach aufgebaut. Sie registriert welches Objekt welche Parameter übermitteln darf(zur Sicherstellung das keine falschen Parameter manuell eingegeben werden können), und den Klassen- und Methodennamen der aufgerufen werden soll. Zusätzlich können die Parameter noch verschlüsselt werden, ist aber nur ne kleine Spielerei von mir und nicht wirklich immer nötig.
Nach der Serveranfrage kann ich mir dann an jeder x-beliebigen Stelle die Parameter auslesen und die Klasse und/oder Methode dazu aufrufen, bei bedarf natürlich auch mit Parameterübergabe.

Wie meinst du denn das wieder?
Ich würde eher sagen dass dir dazu das Wissen fehlt, denn mir ist eine solche Einschränkung nicht bekannt

Also meines Wissens nach ist es nicht möglich, dass ich eine Klasse irgendwo in meinem Web-Projekt erstellen kann und darauf zugreifen kann, weil es dort keinen Namespace gibt.
Da bin ich an den Ordner App_Code gebunden oder muss ein Projekt hinzufügen oder einen Verweis auf eine DLL setzen.
Wenn ich da falsch informiert bin dann freue ich mich über neue Informationen darüber.

Teilweise gebe ich dir Recht, aber auch nur im Sinne dass Microsoft viel Dummyzeugs reingebaut hat und dieses propagandiert

Ja genau das meinte ich. Ich bin mir auch fast sicher das viele Leute die mit MS Internetseiten erstellen nicht wirklich wissen wie das Web funktioniert und auch wenig Ahnung von den HTML-Tags selber haben.
Jetzt nicht lachen, ich hab mal jemanden getroffen, der dachte das MS eine eigene Websprache ist und wußte nicht das MS das auch 'nur' in HMTL umwandelt.
Als ich dann zu ihm sagte das er mal in den Quellcode des Browsers sehen soll wußte er nicht mal was das ist. Das ist sicherlich eine ganz große Ausnahme, dennoch hab ich das erlebt.

5.941 Beiträge seit 2005
vor 15 Jahren

Hallo Taucher

ich habe nicht gesagt das PHP stark typisiert ist, sondern teilweise typsicherer ist.
Du kannst in PHP, dessen Funktion oder Methode ein Object oder ein Array erwartet kein NULL zuweisen. Das gibt eine Exception.

Und was soll das bringen?
Ob ich jetzt vor oder in der Methode auf null überprüfe sollte mir überlassen werden und nicht erzwungen werden.
Ich weiss nicht genau, ob und wie sich das in PHP verhält, aber ich erkenne keinen Vorteil darin.

Ja der Request ist das Event, keine Serveranfrage (per GET oder POST) keine reaktion. Man kann ja jetzt auch Spitzfindig sein und sagen das der Request der Auslöser für ein Event ist 😉
[...]

Der Request ist der Grund warum man Events per Requests anstossten kann 😃
Und geänderte Daten die vom Client kommen, oder auf dem Server sind, oder sogar im Abgleich können dann Auslöser sein, ja.
Schlussendlich baust du dir einfach eine andere Abstraktion davon auf, wie sich das anhört.
Dieses Bedürfniss hatte ich allerdings noch nie...

Also meines Wissens nach ist es nicht möglich, dass ich eine Klasse irgendwo in meinem Web-Projekt erstellen kann und darauf zugreifen kann, weil es dort keinen Namespace gibt.
Da bin ich an den Ordner App_Code gebunden oder muss ein Projekt hinzufügen oder einen Verweis auf eine DLL setzen.
Wenn ich da falsch informiert bin dann freue ich mich über neue Informationen darüber.

Bei einem Website-Projekt kannst du innerhalb des Projektes nur App_Code benutzen.
Du kannst aber auch Klassenbibliotheken einbinden.

Wenn du ein WAP (Web Application Project) benutzt, kannst du den Code platzieren wo du möchtest, plus natürlich auch Klassenbibliotheken.

Ja genau das meinte ich. Ich bin mir auch fast sicher das viele Leute die mit MS Internetseiten erstellen nicht wirklich wissen wie das Web funktioniert und auch wenig Ahnung von den HTML-Tags selber haben.
Jetzt nicht lachen, ich hab mal jemanden getroffen, der dachte das MS eine eigene Websprache ist und wußte nicht das MS das auch 'nur' in HMTL umwandelt.
Als ich dann zu ihm sagte das er mal in den Quellcode des Browsers sehen soll wußte er nicht mal was das ist. Das ist sicherlich eine ganz große Ausnahme, dennoch hab ich das erlebt.

Hehe 😃

Lies: http://www.aspnetzone.de/blogs/juergengutsch/archive/2009/03/12/asp-net-und-dann-war-da-noch-was.aspx

Nun, das ist ein Problem mit der Marketing- und Verkaufsabteilung von Microsoft.
Das was mir an ASP.NET nicht gefällt nutze ich nicht... und zusätzlich versuche ich natürlich die Leute davon zu überzeugen das RAD für richtige Projekte Mist ist und der Rest steht ja im Artikel oben.
Genauso wie es in allen Technologien möglich ist, Mist zu machen.

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

M
221 Beiträge seit 2008
vor 15 Jahren

Prinzipiell müsste das hier das sein, was du suchst:

Zugriff auf Member über Variable

T
Taucher Themenstarter:in
307 Beiträge seit 2008
vor 15 Jahren

Also meine Ursprüngliche Frage ist beantwortet, dennoch gebe ich weiter Antwort weil das weiterführende Thema doch interessant ist. Wenn das falsch ist, weißt mich bitte darauf hin und ich lasse es.

Und was soll das bringen?
Ob ich jetzt vor oder in der Methode auf null überprüfe sollte mir überlassen werden und nicht erzwungen werden.
Ich weiss nicht genau, ob und wie sich das in PHP verhält, aber ich erkenne keinen Vorteil darin.

Genau da unterscheiden sich die Geister, und deshalb gibt es wahrscheinlich auch den Unterschied der Programmiersprachen.
Für mich macht es keinen Sinn, dass ich einer Funktion oder Methode NULL übergeben kann, wenn ein Objekt erwartet wird.
(Da es in C# keine Funktionen gibt werde ich zukünftig nur noch Methoden erähnen)
Wieso?
Was soll eine Methode mit NULL machen wenn ein Objekt erwartet wird? Das musst Du mir mal erklären.
Dazu gibt es ja die Angaben bzw. die Typisierung.
Und MS macht da ja auch nur bei Objekten die Ausnahme soweit ich weiß.
Denn z.B.


private int getAnything()
{
    return null;
}

wird ebensowenig funktionieren wie


private void getAnything(int mySelf)
{
   return;
}
...
this.getAnything(null);

wenn ich es nicht explizit mit ? zulasse.
Wo ist also Deiner Meinung nach der Unterschied wenn ich Objekte verwende?
Das Widerspricht sich meiner Meinung nach auch mit Deiner Aussage:

Ob ich jetzt vor oder in der Methode auf null überprüfe sollte mir überlassen werden und nicht erzwungen werden.

Der Request ist der Grund warum man Events per Requests anstossten kann 😃

FALSCH!
Ich werde kein Event eines Controls auslösen wenn ich den Request dazu nicht erhalte. Damit meine ich jetzt nicht ein banales X_RowDataBound oder so, was ein Control beherbergt, sondern ich rede von der Kommunikation zwischen Client und Server.
Denn ein solches Event ist z.B. eines der propagantierten Geschichten die MS macht, aber nicht nötig sind.
Denn entweder ich habe einen Grundaufbau eines Controls oder nicht.
Aber ich denke das Du da was dagegen sagen wirst, dann aber bitte mit konkreten Beispiel.

Und geänderte Daten die vom Client kommen, oder auf dem Server sind, oder sogar im Abgleich können dann Auslöser sein, ja.

Wieder falsch!
Wenn ich Daten per Post oder Get übermittle bzw. am Server empfange, dann spielt das keine Rolle welche Daten ich auf dem Server habe. Denn dadurch löse ich IMMER ein 'Event' aus das reagiert. Zumindest im Normalfall, außer der Request ist nicht erlaubt oder fehlerhaft.

Schlussendlich baust du dir einfach eine andere Abstraktion davon auf, wie sich das anhört.
Dieses Bedürfniss hatte ich allerdings noch nie...

Jein. Ich ergänze nur das was mir fehlt, die Automatisierung.

Bei einem Website-Projekt kannst du innerhalb des Projektes nur App_Code benutzen.
Du kannst aber auch Klassenbibliotheken einbinden.

Wenn du ein WAP (Web Application Project) benutzt, kannst du den Code platzieren wo du möchtest, plus natürlich auch Klassenbibliotheken

Mit dem Project hinufügen meinte ich eine Bibliothek.
Das WAP-Prinzip kenne ich nicht, gibt es da noch was zu sagen oder was ich wissen sollte?

Und danke für die Auseinandersetzung, ich hoffe die ist für Dich/Euch ebenso lehrreich wie für mich.

J
1.114 Beiträge seit 2007
vor 15 Jahren

Für mich macht es keinen Sinn, dass ich einer Funktion oder Methode NULL übergeben kann, wenn ein Objekt erwartet wird.

Alles in .NET sind Objekte, und eine Instanz einer Klasse kann nun mal auch den Werte null haben, d.h. das Objekt ist nicht instanziert. Also sehe ich keine Problem darin, einer Funktion die ein Objekt Parameter erwartet, dass dort eben ein "leeres" Objekt übergeben wird. Wenn das in der Funktion selbst nicht erlaubt sein soll, dann kannst du doch dort auf ein Leichtes auf null prüfen und gegebenfalls eine NullReferenceException mit einer genauen Fehlerbeschreibung schmeissen.

Was soll eine Methode mit NULL machen wenn ein Objekt erwartet wird? Das musst Du mir mal erklären.

Lässt du Null nicht zu, schränkt das das oben erwähnte Scenario nur unnötig ein. Persönlich nutze ich z.B. sehr oft überladene und parametrisierte Konstruktoren für Klassen, um die Instanzierung von aussen zu erleichtern. Oftmals wird aber einfach nur ein Parameter weggelassen, da vielleicht nicht bekannt. Lösen kann ich das dann ganz bequem so:

public Logging(MyHost host)
{
    this.host = host;
    if (host != null)
        Console.WriteLine("No host provided");
    else
        Console.WriteLine(string.Format("Logging for host {0}", host.Name);
}

und dazu z.B. einen parameterlosen Konstruktor:

public Logging() : this(null) { } 

d.h. ich habe meine ganze Funktionalität in einer Methode untergebracht. Wenn ich kein null zulassen dürfte, müsste ich neuen Code in meinen parameterlosen Konstruktor eingeben.

Wie gesagt, das Nicht-Zulassen von null schränkt nur ein, und bringt meines Erachtens keinerlei Vorteile, da zu jeder Zeit eine Prüfung auf null durchzogen werden kann, und entsrpechend darauf reagiert werden kann. Es widerspricht auch in keinster Weise dem OO Ansatz, da nun mal alle Objekte den Wert null haben dürfen.

2.891 Beiträge seit 2004
vor 15 Jahren

Hallo Taucher,

Und MS macht da ja auch nur bei Objekten die Ausnahme soweit ich weiß.
Denn z.B. [...code...] wird ebensowenig funktionieren wie [...code...] wenn ich es nicht explizit mit ? zulasse.

Du weißt aber, dass zwischen Wert- und Referenzdatentypen unterschieden wird?

Denn dass, was du als "Objekte" bezeichnest, sind Referenztypen, und int ist in Werttyp.
Referenzdatentypen kann man sich in etwa wie Pointer vorstellen. Und da macht null durchaus Sinn, weil es eben auch Nullpointer gibt/geben kann.
Zu deinem Beispiel: Int ist wie schon gesagt ein Werttyp und kann dementsprechend nicht null sein. Int? ist eigentlich nur "Compilermagic", der den int-Wert in einem Referenztyp kapselt (Nullable<int>). Nur dadurch kann man dann auch null übergeben.

Gruß,
dN!3L

P.S.: Wenn dir unbedingt daran gelegen ist, dass man kein null übergeben kann, guck dir mal Spec# an. Da kannst du dann als Parametertyp z.B. object! angeben.

5.941 Beiträge seit 2005
vor 15 Jahren

Hallo Taucher

Wo ist also Deiner Meinung nach der Unterschied wenn ich Objekte verwende?

Jelli hat es schon ziemlich schön beschrieben, was man bspw. damit anstellen kann.
Auch liegt es am Konzept von .NET, wie damit umgegangen wird.

Ich persönlich bin zufrieden so, dann habe ich die Möglichkeiten die Jelli schon beschrieben hat, sowie keine Einschränkung.
Du kannst vielfach nicht garantieren, dass du keinen Nullwert bekommst, bzw. es macht m.E. vielerorts keinen Sinn, dies vor jedem Methodenaufruf zu checken.

Das Widerspricht sich meiner Meinung nach auch mit Deiner Aussage:

Ob ich jetzt vor oder in der Methode auf null überprüfe sollte mir überlassen werden und nicht erzwungen werden.

Inwiefern? 😃

Was soll eine Methode mit NULL machen wenn ein Objekt erwartet wird? Das musst Du mir mal erklären.
Dazu gibt es ja die Angaben bzw. die Typisierung.

Beispielsweise nur bestimmte Teile in der Methode ausführen (Jelli), oder Standardwerte zurückgeben.
Die Typisierung hat in diesem Kontext eine andere Bedeutung, du schränkst den Typen ein.

Vielfach ist es ja erwünscht dass du einen Standardwert hast, den du nutzen kannst.
Bei Wertetypen (Strukturen) wie bspw. DateTime war es früher auch immer wünschenswert dass es einen Standardwert gäbe (DateTime.MinValue kann problematisch sein), nicht ohne Grund wurden ja auch die Nullable-Types umgesetzt.

Der Request ist der Grund warum man Events per Requests anstossten kann 😃
FALSCH!

Was ist daran falsch?
Der Satz ist schwer zu verstehen und im Grund sollte er das gleiche aussagen wie von dir geschrieben:

Man kann ja jetzt auch Spitzfindig sein und sagen das der Request der Auslöser für ein Event ist 😉

Oder wie hast du ihn verstanden?

Ich werde kein Event eines Controls auslösen wenn ich den Request dazu nicht erhalte. Damit meine ich jetzt nicht ein banales X_RowDataBound oder so, was ein Control beherbergt, sondern ich rede von der Kommunikation zwischen Client und Server.
Denn ein solches Event ist z.B. eines der propagantierten Geschichten die MS macht, aber nicht nötig sind.
Denn entweder ich habe einen Grundaufbau eines Controls oder nicht.
Aber ich denke das Du da was dagegen sagen wirst, dann aber bitte mit konkreten Beispiel.

Schlussendlich werden auch Events wie RowDataBound indirekt durch einen Request ausgelöst
Was willst du damit sagen?
RowDataBound oder ähnliche Events machen das Control flexibler, wo liegt deines Erachtens der Nachteil?

Und geänderte Daten die vom Client kommen, oder auf dem Server sind, oder sogar im Abgleich können dann Auslöser sein, ja.
Wieder falsch!
Wenn ich Daten per Post oder Get übermittle bzw. am Server empfange, dann spielt das keine Rolle welche Daten ich auf dem Server habe. Denn dadurch löse ich IMMER ein 'Event' aus das reagiert. Zumindest im Normalfall, außer der Request ist nicht erlaubt oder fehlerhaft.

Es muss keine Rolle spielen, da hast du Recht - aber es kann 😃

Es geht mir darum, dass du einen Event dann auslösen kannst, wenn eine Änderung von einem Status eintrifft.
Diese Statusänderung kann innerhalb des Requests sein, oder bei einem Request auf dem Server passieren oder es kann ein Abgleich von Daten auf dem Server und Daten im Request vorgenommen werden.

Schau dir mal das an:

Ich glaube wir reden uns da ein bisschen auseinander.

Schlussendlich baust du dir einfach eine andere Abstraktion davon auf, wie sich das anhört.
Dieses Bedürfniss hatte ich allerdings noch nie...

Jein. Ich ergänze nur das was mir fehlt, die Automatisierung.
Mitthilfe einer Abstraktion, oder?

Mit dem Project hinufügen meinte ich eine Bibliothek.
Das WAP-Prinzip kenne ich nicht, gibt es da noch was zu sagen oder was ich wissen sollte? Hä?
Bibilothek einbinden. Bei Website-Project nur App_Code und bei WAP überall.
Unter dem Stichwort WAP oder dem ausgeschriebenen (oben) findest du viele Infos im Web.

Der Vorteil ist, dass das Ding schneller kompiliert und ein richtiges Projekt mit einer Projektdatei darstellt.
Dann kannst du alle Vorteile eines VS-Projektes nutzen, die vorher mit Website nicht möglich waren, wie bspw. Pre- / Post-Buildevents, etc...

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

T
Taucher Themenstarter:in
307 Beiträge seit 2008
vor 15 Jahren

Hallo Peter,
tut mir leid das ich mich jetzt erst melde aber ich war eine Zeit lang abwesend.
Das mit dem Null und Objekten lassen wir denke ich, weil sich da einfach die Geister scheiden und es unterschiedliche Meinungen gibt. Deshalb behandeln die Programmiersprachen das wohl auch unterschiedlich.
Aber ich will noch eines dazu sagen, es geht auch in C# das ich kein Null übergeben kann wenn ich es denn erwarte. Nur mit dem Unterschied das ich dann kein Objekt sondern eine Struktur übergeben muss bzw. erwarte. Somit ist das Thema inn dieser Hinsicht von Typsicherheit auch geklärt.
Wäre schön gewesen wenn das jemand von euch gesagt hätte 😉
Und für die Beschreibung was Jelli gebracht hat nehme ich in C# die Überladung...
Aber egal.

Der Request ist der Grund warum man Events per Requests anstossten kann 😃

Da hab ich mich verlesen, tut mir leid. Natürlich ist das richtig. Kein Request, kein Event. Aber das hab ich ja auch versucht zu verdeutlichen.

RowDataBound oder ähnliche Events machen das Control flexibler, wo liegt deines Erachtens der Nachteil?

Auch wenn sich das vielleicht widerspricht, nirgends und doch ständig 😉

Was ich damit meine ist eben der Zeitpunkt bzw. der Lebenszyklus der mich da meiner Meinung nach einschränkt.
Mir ist hier schon mehr wie einmal vorgeworfen worden das es dann an meinem Design liegt. Das kann ich allerdings nicht bestätigen, denn durch meine Art des Programmierens wird verhindert das ein Objekt, eine Klasse, ein Container oder wie auch immer doppelt geladen wird. Das ist ja auch das Ziel was ich verfolge!

Hä?
Bibilothek einbinden. Bei Website-Project nur App_Code und bei WAP überall.
Unter dem Stichwort WAP oder dem ausgeschriebenen (oben) findest du viele Infos im Web.

Bibliothek einbinden = Projekt hinzufügen = DLL-Verweis. Oder versteh ich da grad nur Bahnhof???