Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   C# Wieso muss meine Funktion static sein? (C#) (https://www.delphipraxis.net/75938-wieso-muss-meine-funktion-static-sein-c.html)

Pseudemys Nelsoni 27. Aug 2006 15:21


Wieso muss meine Funktion static sein? (C#)
 
Tag

Code:
namespace Ism
{
    class Bot
    {
        Irc irc = new Irc(HandleMessage);

        internal void HandleMessage(Irc.RawCommand rawCommand)
        {

        }
    }
}
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?

[edit=SirThornberry]Verschoben und als C# martkiert. Mfg, SirThornberry[/edit]

3_of_8 27. Aug 2006 15:25

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.

DGL-luke 27. Aug 2006 15:26

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.

Khabarakh 27. Aug 2006 15:33

Re: Wieso muss meine Funktion static sein? (C#)
 
Zitat:

Zitat von C# Language Reference
A variable initializer for an instance field cannot reference the instance being created.

Zitat:

Zitat von DGL-luke
@3_of_8: Das halte ich jetzt für... Unsinn.

Schließe mich an :zwinker: . Unter .Net gibt es keine Unterscheidung zwischen statischen und nonstatischen Delegate-Typen.

Pseudemys Nelsoni 27. Aug 2006 15:35

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:
namespace Ism
{
    class Bot
    {
        Irc irc;

        internal Bot()
        {
            irc = new Irc(HandleMessage);
        }

        internal void HandleMessage(Irc.RawCommand rawCommand)
        {

        }
    }
}
Und es funktioniert, nur seh ich den Unterschied zu meinem obigen Code nicht. Hm,,,

DGL-luke 27. Aug 2006 15:40

Re: Wieso muss meine Funktion static sein? (C#)
 
welchen Unterschied gibt es zwischen

Delphi-Quellcode:
var x = '42';
und

Delphi-Quellcode:
var x = inttostr(42);
Eigentlich keinen.... nur zweiteres funktinoiert halt nicht... ;)

Khabarakh 27. Aug 2006 16:08

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:
class FooBar
{
    int foo = bar + 1;
    int bar = foo + 1;
}
verhindern, so etwas ist im Konstruktor doch etwas einsichtiger.

Nächste Frage wäre dann, warum es bei statischen Feldern erlaubt ist :zwinker: .

3_of_8 27. Aug 2006 16:15

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 01:36 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz