2009-04-27 35 views
17

Soy nuevo en C#. Hasta este momento solía crear todas las variables globales, públicas y estáticas. Todos mis métodos son públicos, así que puedo acceder a ellos desde otras clases.¿Cuándo debería usar métodos públicos/privados/estáticos?

Leí en SO que los métodos estáticos menos públicos que tengo, mejor. Así que reescribí mis aplicaciones poniendo todo el código en una clase: la clase de formulario. Ahora todos mis métodos son privados y no hay ningún método estático.

Mi pregunta: ¿Qué debo hacer, mantener todo en la clase de formulario es volcar en mi opinión.

¿Cuándo debo usar public, private y static private/public?

Obtengo los métodos públicos como 'contras', porque pueden descompilarse, pero lo dudo. Mis métodos públicos también se pueden decompilar. ¿Qué es 'privado' en un método privado?

EDIT: No estoy preguntando cómo evitar la descompilación de mi programa, estoy preguntando si debería usar estática, privada y pública.Y también: ¿Hay algún problema al poner todo el código en el ¿Forma la clase entonces no tengo que usar métodos públicos?

+0

Su pregunta parece un duplicado de: [http://stackoverflow.com/questions/99688/private -vs-public-members-in-practice-how-important-is-encapsulation] (http://stackoverflow.com/questions/99688/private-vs-public-members-in-practice-how-important-is- encapsulación) –

Respuesta

8

privada es para miembros de la clase que desea sólo el acceso dentro de la clase del cuerpo, y en C# miembros son conjunto predeterminado de privada a menos que se especifique diferente

ejemplos de cuándo usar privada:

class Account 
{ 

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

public por el contrario es lo contrario, no hay restricciones para acceder a los miembros públicos, por lo que cuando las cosas que no importan con el usuario que tiene acceso deben ser públicas.

estático, por otro lado no tiene relación con los dos, porque no se trata de permisos para los métodos, estático por otro lado es una declaración constante o de tipo. Si la palabra estática se aplica a la clase, entonces cada miembro de la clase debe declararse estático.

ejemplos de cuándo usar estática:

static int birth_year= 1985 

Modifiers in C# Reference le dará más detalles de todos los modificadores en C# y ejemplos de cómo deben ser utilizados

4

Ver Access Modifiers (C# Programming Guide). Pero es mucho mejor si tienes un libro decente de C# y OOP/OOD: estos son conceptos básicos de la informática.

Resumen breve: los modificadores de acceso promueven la encapsulación, lo que básicamente significa que cada clase debe mantener sus partes privadas para sí misma.

3

Comenzaría a aprender los conceptos básicos sobre la programación orientada a objetos. Hay muchos recursos por ahí. Probablemente lo mejor es tomar un curso para comenzar. Parece que estás lejos de comprender los principios OO.

+0

Cuando dije "Soy nuevo en C#" no quise decir que soy novato. Hace años que soy un amante del pascal, soy nuevo en C#. –

+7

Es solo un consejo. No quería ofender ni decir que no eres un buen programador. Pero cuando dices que has hecho "todo estático" y "pones todo en una clase para hacerlo privado" suena como si no estuvieras familiarizado con la programación orientada a objetos. –

0

Esto parece más básico que la pregunta vinculada anteriormente. Para prosperar adecuadamente en un idioma de OO, tendrá que descubrir cómo descomponer su objetivo final en una serie de objetos que funcionan en conjunto (incluso conteniendo y extendiéndose uno al otro) para lograr una serie de objetivos. Esta abstracción tiene numerosos beneficios que se hacen aparentes una vez que comienzas a implementar correctamente el diseño OO. Va a querer un nuevo libro de C#, como se mencionó, si aún no ha llegado a la parte que explica los conceptos básicos de OO Programación orientada.

12

todo debe ser privada a menos que se demuestre lo contrario. La diferencia entre lo público y lo privado se encuentra entre lo que se supone debe mantenerse compatible y lo que no se debe mantener compatible, lo que se supone que es interesante para el mundo y lo que no se supone que sea su negocio.

Cuando declaras algo público, la clase (y, en consecuencia, el objeto) está haciendo una fuerte declaración: esta es mi interfaz visible, hay muchas otras como esta, pero esta es mía. La interfaz pública es un acuerdo contractual que su clase está exportando al resto del mundo (lo que sea que eso signifique) sobre lo que puede hacer. Si modificas la interfaz pública, te arriesgas a romper el contrato que el resto del mundo asume sobre la clase.

Por otro lado, las cosas privadas son internas de la clase. Es compatible con la funcionalidad que la clase debe usar para hacer su trabajo mientras lleva el estado del objeto (si es un método) o mantiene su estado interno (si es una variable). Eres libre de hackear y manipular las cosas privadas de la clase tanto como quieras, sin romper el contrato de interfaz, lo que significa que esto te da una amplia libertad para la refactorización (de la representación de datos internos, por ejemplo, para la eficiencia). Las cosas privadas no son parte de la interfaz.

Protegido es algo que implica la apertura a la reimplementación. Evite, si puede, herencias profundamente anidadas. Te arriesgas a hacer las cosas muy difíciles de manejar, ya que tu clase de reimplementación puede arruinar la clase base.

Técnicamente, una clase debe declarar una interfaz (pública) y una implementación (privada). La interfaz no debe tener código en absoluto, simplemente delegue a la lógica privada de "implementación". Es por eso que en Java y C# tiene declaración de interfaz, que formaliza el concepto de clase abstracta pura en C++.

Static es algo que reside lógicamente en el ámbito de su clase, pero no depende del estado de la clase en sí. Se debe usar con moderación cuando lo dicte un patrón de diseño (por ejemplo, singleton, método de fábrica).

4

Todo se respondió anteriormente, pero creo que podría simplificarse un poco ... así que decorar un método público, si otras clases van a utilizar este método. Si no, márcalo como privado.

Por ejemplo, tiene Clase A y Clase B. Diga La clase A tiene 3 métodos (x, y, z). Métodos x, y será utilizada por Clase B, por lo que ellos marcan tanto públicos, pero el método z sólo será ser utilizado por el método x dentro Clase A así lo marcan privada ya que no hay necesidad de exponer este método al mundo externo. La lógica dentro de este método está destinada solo para uso interno.

Static is differentl esta decoración significa que no puede crear una instancia de un objeto marcado como estático. El objeto es - como dice la palabra clave - static (no se puede cambiar ni modificar).

0

Java proporciona una serie de modificadores de acceso para establecer niveles de acceso para clases, variables, métodos y constructores. Los cuatro niveles de acceso son:

Visible para el paquete, por defecto. No se necesitan modificadores.

Visible solo para la clase (privado).

Visible para el mundo (público).

Visible para el paquete y todas las subclases (protegido).

Aquí se muestra un ejemplo:

public class {bicicletas

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; 
} 
    ... 

}

Cuestiones relacionadas