Voy a modificar su pregunta ligeramente para proporcionar una mejor comparación. En Java comúnmente tiene captadores públicas y definidores privadas, con ser el constructor del initializor [sic] de la variable, como por ejemplo:
public class Person{
private String fName;
public Person (String name) {
setName(name);
}
private void setName(String someName){
fName = someName;
}
String getName(){
return fName;
}
}
Con un usuario de la clase sólo ser capaz de recuperar el valor después de la inicialización a través el constructor:
public class Example {
Person person = new Person("Fred");
System.out.println(person.getName()); // Allowed
System.out.println(person.fName); // Not allowed because fName is a local class variable
person.setName("Aaron"); // Not allowed because setName() is a local class method
}
Ahora aquí es donde C# puede llegar a ser confuso, ya que en lugar de utilizar Person.getName
sólo tiene que utilizar la variable en sí, sin embargo, esta variable puede todavía encapsularse. En Java, se le enseña que las variables de clase deben ser locales (privadas) y solo se debe acceder con getters y setters. C# es esencialmente el mismo, pero la sintaxis y la lógica son diferentes. La reescritura de mi ejemplo en C# sería:
public class Person {
public String fName {get; private set;}
public Person(String name) {
this.fName = name;
}
}
public class Example {
Person person = new Person("Fred");
Console.WriteLine(person.fName); // This is allowed
person.fName = "Tony"; // Not allowed because setter is private
}
Ahora si usted quiere añadir lógica a su getter y setter utilizando las convenciones anteriores, lo que se necesita para introducir una variable privada local, pero el código en Example
y su persona constructor no cambiaría:
class Person {
private String _fName;
public String fName {
get { return _fName + ".addedText"; }
private set { _fName = value.ToLower(); }
}
public Person(String fName) {
this.fName = fName;
}
}
Ahora bien, si esto es mejor o peor que Java es un tanto discutible, pero por lo que he visto el código va a estar fuera de lugar en C# si lo hace algo así como el a continuación, aunque sintaxis, funcionará:
class Person2 {
private String fName;
public Person2(string fName) {
setFname(fName);
}
private void setFname(String fName) {
this.fName = fName.ToLower();
}
public String getFname() {
return this.fName+ ".addedText";
}
}
Se llaman propiedades. Ver http://msdn.microsoft.com/en-us/library/x9fsa0sw.aspx –