AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) C# Wieso muss meine Funktion static sein? (C#)

Wieso muss meine Funktion static sein? (C#)

Ein Thema von Pseudemys Nelsoni · begonnen am 27. Aug 2006 · letzter Beitrag vom 27. Aug 2006
Antwort Antwort
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#1

Wieso muss meine Funktion static sein? (C#)

  Alt 27. Aug 2006, 16:21
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]
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#2

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

  Alt 27. Aug 2006, 16:25
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.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#3

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

  Alt 27. Aug 2006, 16:26
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.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

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

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

  Alt 27. Aug 2006, 16:33
Zitat von C# Language Reference:
A variable initializer for an instance field cannot reference the instance being created.
Zitat von DGL-luke:
@3_of_8: Das halte ich jetzt für... Unsinn.
Schließe mich an . Unter .Net gibt es keine Unterscheidung zwischen statischen und nonstatischen Delegate-Typen.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#5

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

  Alt 27. Aug 2006, 16:35
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,,,
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#6

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

  Alt 27. Aug 2006, 16:40
welchen Unterschied gibt es zwischen

var x = '42'; und

var x = inttostr(42); Eigentlich keinen.... nur zweiteres funktinoiert halt nicht...
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

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

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

  Alt 27. Aug 2006, 17:08
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 .
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#8

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

  Alt 27. Aug 2006, 17:15
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?
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
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 03:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf