![]() |
Wieso muss meine Funktion static sein? (C#)
Tag
Code:
Wieso funktioniert der Code hier nicht? Ich kann die Funktion nicht dem Irc Konsturktor übergeben. Wenn ich die HandleMessage Methode aber static setze, dann gehts. Aber es soll ja gar keine Klassenmethode sein, sondern eine ganz normale. Any ideas?
namespace Ism
{ class Bot { Irc irc = new Irc(HandleMessage); internal void HandleMessage(Irc.RawCommand rawCommand) { } } } [edit=SirThornberry]Verschoben und als C# martkiert. Mfg, SirThornberry[/edit] |
Re: Wieso muss meine Funktion static sein? (C#)
Ich weiß ja nicht, wie das unter C# geregelt ist, aber eine normale Methode hat einen 8 Bit-Pointer und eine Klassenmethode 4 Bit-Pointer. Es könnte also sein, dass der Konstruktor von Irc einen 4 Bit-Klassenmethodenpointer erwartet und du einen 8 Bit-Methodenpointer lieferst.
|
Re: Wieso muss meine Funktion static sein? (C#)
Wahrscheinlich weil du eine variable nicht mit einer "dynamischen" Methode initialisieren kannst.
Initialisere "irc" im Konstruktor deiner "Bot"-Klasse. @3_of_8: Das halte ich jetzt für... Unsinn. |
Re: Wieso muss meine Funktion static sein? (C#)
Zitat:
Zitat:
|
Re: Wieso muss meine Funktion static sein? (C#)
3_: Soweit ich weiss haben Pointer 32Bit bzw 4Byte.
@DGL: Das ging, danke. @Khabarakh: Habs nun so:
Code:
Und es funktioniert, nur seh ich den Unterschied zu meinem obigen Code nicht. Hm,,,
namespace Ism
{ class Bot { Irc irc; internal Bot() { irc = new Irc(HandleMessage); } internal void HandleMessage(Irc.RawCommand rawCommand) { } } } |
Re: Wieso muss meine Funktion static sein? (C#)
welchen Unterschied gibt es zwischen
Delphi-Quellcode:
und
var x = '42';
Delphi-Quellcode:
Eigentlich keinen.... nur zweiteres funktinoiert halt nicht... ;)
var x = inttostr(42);
|
Re: Wieso muss meine Funktion static sein? (C#)
Ich nehme an, die Einschränkung soll zyklische Referenzen (die sich jedoch problemlos kompilieren ließen!) wie
Code:
verhindern, so etwas ist im Konstruktor doch etwas einsichtiger.
class FooBar
{ int foo = bar + 1; int bar = foo + 1; } Nächste Frage wäre dann, warum es bei statischen Feldern erlaubt ist :zwinker: . |
Re: Wieso muss meine Funktion static sein? (C#)
Pointer haben 32 Bit, Methodenzeiger haben 64 Bit.
Ich denke mal, dass der Konstruktor eine Funktion erwartet, die die Klasse Irc dann bei Bedarf aufruft. Irre ich mich da? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:20 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