2010-10-12 21 views
14

In C/C++ habe ich eine Reihe von Funktionen, die ich von main() aufrufen, und ich möchte dies in C# umschreiben. Kann ich eigenständige Funktionen (Methoden) haben oder muss ich sie in eine andere Klasse legen? Ich weiß, dass ich Methoden innerhalb derselben Klasse haben kann, aber ich möchte eine Datei für jede Funktion/Methode haben.Kann es eigenständige Funktionen in C# ohne eine Klasse geben?

Wie dies funktioniert:

using System.IO; 
using System; 


class Program 
{ 
    static void Main() 
    { 
House balls = new House(); 
balls.said(); 

    } 
} 
    public class House 
    { 
     public void said() 
     { 
      Console.Write("fatty"); 
      Console.ReadLine(); 

     } 
    } 

Aber dann muss ich eine Instanz von Haus erstellen und Anruf sagte(), wenn in C kann ich nur den Anruf().

+1

können Sie statische Methoden verwenden, dann brauchen nicht eine Instanz – w69rdy

+3

Hinweis zu erstellen: Man denke an, was auf diesen Linien des Codes geschieht: 'Console.Write (...);' und 'Console .ReadLine(); ' – Dinah

Antwort

15

Nein. Machen Sie sie static und legen Sie sie in eine static Utility-Klasse, wenn sie tatsächlich nicht in eine Ihrer vorhandenen Klassen passen.

1

Wenn Sie Ihre Methode als static (das heißt: public static void said()) deklarieren, dann können Sie es einfach mit House.said() aufrufen, was so nah ist, wie Sie in C# bekommen.

4

Es gibt kein Konzept von eigenständigen Funktionen in C#. Alles ist ein Objekt.

Sie können auf einig Utility-Klasse statische Methoden erstellen, und die Teilnehmer anrufen, ohne eine Instanz einer Klasse zum Beispiel der Schaffung

class Program 
{ 
    static void Main() 
    { 
    House.said(); 
    } 
} 

public class House 
    { 
     public static void said() 
     { 
      Console.Write("fatty"); 
      Console.ReadLine(); 

     } 
    } 
+0

Warum die Negativabstimmung? –

+0

haha, war ich nicht. –

+0

Wer jetzt "Fixed" antwortet, wird beim Down-Voting ertappt. WARTE .. OH S ~~~. –

3

Obwohl das Konzept der Stand-alone-Funktionen besteht in .NET, C# nicht erlaubt Sie spezifizieren solche Funktionen. Sie müssen sie in eine statische Utils Klasse oder ähnliches stecken.

1

Sie könnten alle Ihre Methoden der Program-Klasse hinzufügen, aber dies würde schnell zu einem unüberwindlichen Durcheinander führen, das gemeinhin als God Class oder Ball of Mud Anti-Pattern bezeichnet wird.

Die Pflege einer einzigen Datei für jede Funktion würde in ähnlicher Weise ein großes Durcheinander werden. Die Fragen "Wo lege ich meine Methoden" und "Welche Klassen soll ich erstellen?" Werden von Design Patterns beantwortet. Klassen aggregieren Verhalten (Funktionen) und sollte eine Sache (einzige Verantwortung.)

+1

Yea, speziell um die Gottesklasse zu vermeiden. –

+1

Erstellen Sie Klassen für Dinge (Akteure, Bauherren) und das Tragen von Daten (Datentransferobjekte). Haben Sie keine Angst, viele Klassen zu haben, da dies (bis zu einem gewissen Punkt) ein Hinweis auf eine gute Trennung von Anliegen ist. Open-Source-Projekte in C# sind eine gute Quelle für Anleitungen zum Organisieren von Klassen und Methoden. –

4

Sie müssen sie in eine Klasse zu legen, aber die Klasse kann statisch sein wie andere erwähnt. Wenn Sie wirklich eine separate Datei für jede Methode haben wollen, können Sie die Klasse als Teil markieren folgendes zu erhalten:

Program.cs 
---------- 
class Program 
{ 
    static void Main() 
    { 
     House.said(); 
     House.saidAgain(); 
    } 
} 

House-said.cs 
------------- 
public static partial class House 
{ 
    public static void said() 
    { 
     Console.Write("fatty"); 
     Console.ReadLine(); 
    } 
} 

House-saidAgain.cs 
------------------ 
public static partial class House 
{ 
    public static void saidAgain() 
    { 
     Console.Write("fattyAgain"); 
     Console.ReadLine(); 
    } 
} 

ich empfehlen würde nicht jedes Material abgetrennt, jedoch. Partielle Klassen werden meist verwendet, sodass vom Designer generierter Code keinen benutzerdefinierten Code in derselben Klasse überschreibt. Andernfalls können Sie problemlos mit Hunderten von Dateien und nicht einfach von einer Methode zu einer anderen wechseln. Wenn Sie glauben, dass Sie eine partielle Klasse benötigen, weil die Anzahl der Methoden nicht mehr erreichbar ist, müssen Sie die Logik wahrscheinlich in eine andere Klasse aufteilen.

0

Als Referenz, ich möchte die using static Zugabe von C# 6 hier hinzufügen.

Sie können nun Methoden einer statischen Klasse verwenden, ohne den Namen dieser Klasse erneut eingeben zu müssen. Ein Beispiel die Frage passend wäre:

House.cs

public static class House 
{ 
    public static void Said() 
    { 
     Console.Write("fatty"); 
     Console.ReadLine(); 
    } 
} 

Programm.cs

using static House; 

class Program 
{ 
    static void Main() 
    { 
     Said(); 
    } 
} 
Verwandte Themen