2012-01-14 3 views
5

У меня есть класс, который запрашивает, что при вызове строки отправляется при запросе/инициализации.Использование строк из других классов C#

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

    } 

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

Как бы это было возможно, чтобы принять строку «hostname2») в конструкторе класса и позволяет эту строку, которая будет вызвана в любом месте в классе «Проверка»?

E.g. Я вызываю Checks (hostname2) из ​​класса Form1, теперь, когда инициализируется класс Checks, я могу использовать строку hostname2 в моем классе Checks, а также

ответ

7

Объявить член внутри класса и присвоить значение, которое вы передали члену внутри конструктора:

class Checks 
{ 
    private string hostname2; 

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

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

Если вы также должны иметь доступ извне, делают это свойство:

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

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

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

Properties начать с заглавной буквы, по соглашению. Теперь вы можете получить доступ к нему, как это:

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

Благодаря Энди за указание на это: если вы хотите, чтобы свойство только для чтения, делают сеттер частные:

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

Следует также указать, что если вы НЕ хотите, чтобы внешние классы меняли значение, которое может иметь публичный получатель, но частный или защищенный сеттер. – Andy

+0

Вы также можете использовать ключевое слово 'readonly' в частном поле, чтобы запретить модификацию, за исключением времени построения. Другие классы не могут получить доступ к закрытому полю в любом случае, но 'readonly' не позволяет ** тому же ** классу изменить свое значение позже. Другими словами, он позволяет указать ваше намерение. – TrueWill

2

Вам нужно скопировать конструктор аргумент в переменном классе:

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

Вы можете выставить публичную собственность Retun значения hostname2, который является стандартом для экспонирования личных varibles


class Checks 
{ 
    private string _hostname; 
    public Checks(string hostname2) 
    { 
     _hostname = hostname2; 
    } 
    public string Hostname 
    { 
     get { return _hostname; } 
    } 
} 
Смежные вопросы