2009-04-27 13 views
17

Ich bin neu in C#. Bis zu diesem Moment habe ich jede globale Variable - public static.Alle meine Methoden sind öffentliche statische, so dass ich sie aus anderen Klassen zugreifen kann.Wann sollte ich öffentliche/private/statische Methoden verwenden?

Ich lese auf SO, dass die weniger öffentlichen statischen Methoden, die ich habe, desto besser.So schrieb ich meine Anwendungen, indem Sie den gesamten Code in eine Klasse - die Form-Klasse.Jetzt alle meine Methoden sind privat und es gibt keine statische Methode.

Meine Frage: Was soll ich tun, halten alles in der Form-Klasse meiner Meinung nach Dump.

Wann sollte ich öffentlich, wann privat und wann statisch privat/öffentlich verwenden?

Ich bekomme die öffentlichen Methoden als 'Nachteile', weil sie dekompiliert werden können, aber ich bezweifle das. Meine öffentlichen Methoden können auch dekompiliert werden. Was ist so 'privat' in einer privaten Methode?

BEARBEITEN: Ich frage nicht, wie ich verhindern kann, dass mein Programm dekompiliert wird, ich frage, ob ich statische, private und öffentliche verwenden soll.Und auch: Gibt es ein Problem bei der Bereitstellung des gesamten Codes in der Form-Klasse, also muss ich nicht öffentliche Methoden verwenden?

+0

Ihre Frage scheint wie ein Duplikat: [http://stackoverflow.com/questions/99688/private -vs-public-Mitglieder-in-Praxis-wie-wichtig-ist-Kapselung] (http://stackoverflow.com/questions/99688/private-vs-public-members-in-practice-how-important-is- Encapsulation) –

Antwort

8

privat ist für die Teilnehmer, die Sie nur den Zugriff innerhalb der Klasse des Körpers, und in C wollen, es sei denn anders angegeben

Beispiele, wann privat nutzen:

class Account 
{ 

    private int pin = 1090; 
    public int Pin 
    { 
    get { return pin; } 
    } 
} 

Öffentlichkeit ist das Gegenteil, es gibt keine Einschränkungen beim Zugriff auf öffentliche Mitglieder, also wenn Dinge, die für den Benutzer keinen Einfluss haben, öffentlich zugänglich sein sollen.

statische dagegen hat keine Beziehung zu den beiden, weil es nicht mit der Erlaubnis zu Methoden befasst, statische auf der anderen Seite ist eine Konstante oder Typ-Deklaration. Wenn das Wort static auf die Klasse angewendet wird, muss jedes Member in der Klasse als statisch deklariert werden.

Beispiele, bei denen statische verwenden:

static int birth_year= 1985 

Modifiers in C# Reference wird Ihnen mehr Details aller Modifikatoren in C# und Beispiele, wie sie sollten

4

Siehe Access Modifiers (C# Programming Guide). Aber es ist viel besser, wenn Sie ein anständiges C# - und OOP/OOD-Buch haben: das sind wirklich Grundlagen der Informatik.

Lange Rede, kurzer Sinn: Zugriffsmodifikatoren fördern die Kapselung, was im Grunde bedeutet, dass jede Klasse ihre Privatsphäre für sich behalten sollte.

3

Ich würde anfangen, die Grundlagen über objektorientierte Programmierung zu lernen. Es gibt viele Ressourcen da draußen. Wahrscheinlich ist das Beste, um einen Kurs zu beginnen. Sie scheinen weit davon entfernt zu sein, OO-Prinzipien zu verstehen.

+0

Als ich sagte "Ich bin neu in C#" wollte ich nicht, dass ich Neuling bin. Ich war vor Jahren ein Pascal Liebhaber, ich bin nur neu in C#. –

+7

Es ist wirklich nur ein Ratschlag. Ich wollte nicht beleidigend sein oder sagen, dass du kein guter Programmierer bist. Aber wenn du sagst, du hättest "alles statisch" gemacht und "alles in eine Klasse gebracht, um es privat zu machen" klingt, als ob du nicht mit objektorientierter Programmierung vertraut wärst. –

0

Dies scheint einfacher als die oben verlinkte Frage. Um in einer OO-Sprache richtig gedeihen zu können, müssen Sie herausfinden, wie Sie Ihr Endziel in eine Reihe von Objekten zerlegen, die zusammenarbeiten (und sogar einander enthalten und erweitern), um eine Reihe von Zielen zu erreichen. Diese Abstraktion hat zahlreiche Vorteile, die sich erst zeigen, wenn Sie mit der korrekten Implementierung von OO-Design beginnen. Sie werden, wie erwähnt, ein neues C# -Buch haben wollen, wenn Sie nicht bereits zu dem Teil gekommen sind, der die Grundlagen von b O orientierten Programmierung erklärt. # Mitglieder sind Standardsatz an private

12

Alles sollte verwendet werden, sofern nicht anders bewiesen privat sein. Der Unterschied zwischen öffentlich und privat liegt zwischen dem, was kompatibel gehalten werden soll, und dem, was nicht kompatibel bleiben soll, was für die Welt interessant sein soll und was nicht.

Wenn Sie etwas öffentlich erklären, macht die Klasse (und folglich das Objekt) eine starke Aussage: das ist meine sichtbare Schnittstelle, es gibt viele andere so, aber das ist meins. Die öffentliche Schnittstelle ist eine vertragliche Vereinbarung, die Ihre Klasse in den Rest der Welt (was auch immer das bedeutet) exportiert, was sie tun kann. Wenn Sie die öffentliche Schnittstelle ändern, riskieren Sie, den Vertrag zu brechen, den der Rest der Welt von der Klasse erwartet.

Auf der anderen Seite ist private Sachen intern in der Klasse. Es unterstützt Funktionen, die die Klasse verwenden muss, um ihre Aufgabe zu erfüllen, während sie den Objektzustand herumführt (wenn es eine Methode ist) oder ihren internen Status beizubehalten (wenn es eine Variable ist). Sie haben die Freiheit, die privaten Klasseninhalte beliebig zu hacken und zu basteln, ohne den Schnittstellenvertrag zu unterbrechen, was Ihnen eine große Freiheit beim Refactoring (der internen Datendarstellung, z. B. für die Effizienz) bietet. Privates ist nicht Teil der Schnittstelle.

Geschützt ist etwas, das die Offenheit für die Neuimplementierung beinhaltet. Vermeiden Sie, wenn möglich, tief verschachtelte Vererbungen. Sie riskieren, dass die Handhabung sehr schwierig wird, da Ihre Reimplementierungsklasse die Basisklasse manipulieren kann.

Technisch sollte eine Klasse eine Schnittstelle (öffentlich) und eine Implementierung (privat) deklarieren. Die Schnittstelle sollte überhaupt keinen Code haben, sondern nur an die private "Implementierungslogik" delegieren. Aus diesem Grund haben Sie in Java und C# eine Interface-Anweisung, die das reine abstrakte Klassenkonzept in C++ formalisiert.

Statisch ist etwas, das logisch im Bereich Ihrer Klasse liegt, aber nicht vom Zustand der Klasse selbst abhängt. Es sollte sparsam verwendet werden, wenn ein Entwurfsmuster dies vorschreibt (z. B. Singleton, Fabrikmethode).

4

Alles ist oben bereits beantwortet, aber ich denke, es könnte ein wenig vereinfacht werden ... so schmücken eine Methode öffentlich, wenn andere Klassen diese Methode verwenden werden. Wenn nicht - markieren Sie es privat. B. Klasse und Klasse B. Sagen Sie Klasse A hat 3 Methoden (x, y, z). Methoden x, y wird durch Klasse B, verwendet werden, um sie sowohl öffentliche markieren, aber Methode z wird nur durch die Methode x innerhalb Klasse A so verwendet werden, werden markieren Sie es privat, da es keine Notwendigkeit, zeige diese Methode der Außenwelt an. Die Logik in dieser Methode ist nur für den internen Gebrauch bestimmt.

Statisch ist andersDiese Dekoration bedeutet, dass Sie keine Instanz eines als statisch markierten Objekts erstellen können. Das Objekt ist - wie das Stichwort sagt - statisch (kann nicht geändert oder geändert werden).

0

Java bietet eine Reihe von Zugriffsmodifikatoren zum Festlegen von Zugriffsebenen für Klassen, Variablen, Methoden und Konstruktoren. Die vier Zugriffsebenen sind:

Sichtbar für das Paket, die Standardeinstellung. Es sind keine Modifizierer erforderlich.

Sichtbar nur für die Klasse (privat).

Sichtbar für die Welt (öffentlich).

Sichtbar für das Paket und alle Unterklassen (geschützt).

Hier ein Beispiel:

public class Bicycle {

private int cadence; 
private int gear; 
private int speed; 
private int id; 
private static int numberOfBicycles = 0; 

public Bicycle(int startCadence, int startSpeed, int startGear){ 
    gear = startGear; 
    cadence = startCadence; 
    speed = startSpeed; 

    id = ++numberOfBicycles; 
} 

// new method to return the ID instance variable 
public int getID() { 
    return id; 
} 
    ... 

}

Verwandte Themen