2012-01-14 12 views
5

Tengo una clase que solicita que cuando se llama una cadena se envía al solicitar/inicializarlo.Usando cadenas de otras clases C#

class Checks 
{ 
    public Checks(string hostname2) 
    { 
     // logic here when class loads 

    } 

    public void Testing() 
    { 
     MessageBox.Show(hostname2); 
    } 
} 

¿Cómo sería posible tomar la cadena "hostname2") en el constructor de la clase y permitir que esta cadena para ser llamado en cualquier lugar de la clase "cheques"?

E.g. Llamo Checks (hostname2) desde la clase Form1, ahora cuando la clase Checks se inicializa puedo usar la cadena hostname2 en mi clase Checks también

Respuesta

7

Declarar un miembro dentro de la clase y asignar el valor que pasó al miembro dentro del constructor:

class Checks 
{ 
    private string hostname2; 

    public Checks(string hostname2) 
    { 
     this.hostname2 = hostname2; // assign to member 
    } 

    public void Testing() 
    { 
     MessageBox.Show(hostname2); 
    } 
} 

Si también necesita tener acceso desde el exterior, lo convierten en una propiedad:

class Checks 
{ 
    public string Hostname2 { get; set; } 

    public Checks(string hostname2) 
    { 
     this.Hostname2 = hostname2; // assign to property 
    } 

    public void Testing() 
    { 
     MessageBox.Show(Hostname2); 
    } 
} 

Propiedades comienzan con una letra mayúscula por convención. Ahora se puede acceder a él de esta manera:

Checks c = new Checks("hello"); 
string h = c.Hostname2; // h = "hello" 

Gracias a Andy por señalar esto: si desea que la propiedad a ser de sólo lectura, haga lo privado colocador:

public string Hostname2 { get; private set; } 
+2

Probablemente también deba señalar que si NO desea que las clases externas cambien el valor, puede tener un captador público pero un instalador privado o protegido. – Andy

+0

También puede usar la palabra clave 'readonly' en el campo privado para no permitir la modificación, excepto en el momento de la construcción. Otras clases no pueden acceder a un campo privado de todos modos, pero 'readonly' impide que la ** misma ** clase cambie su valor más tarde. En otras palabras, te permite especificar tu intención. – TrueWill

2

Es necesario copiar el argumento del constructor en una variable de clase:

class Checks { 

    // this string, declared in the class body but outside 
    // methods, is a class variable, and can be accessed by 
    // any class method. 
    string _hostname2; 

    public Checks(string hostname2) { 
     _hostname2 = hostname2; 
    } 

    public void Testing() { 
     MessageBox.Show(_hostname2); 
    } 

} 
2

Usted puede exponer una propiedad pública retun el valor hostname2 que es el estándar para la exposición de sus varibles privadas


class Checks 
{ 
    private string _hostname; 
    public Checks(string hostname2) 
    { 
     _hostname = hostname2; 
    } 
    public string Hostname 
    { 
     get { return _hostname; } 
    } 
} 
Cuestiones relacionadas