2015-04-27 3 views
0

I HAD вопрос несколько минут назад.Получение доступа к переменной в другом классе

для простоты? У меня есть класс «Member» и класс «Race».

Я пытаюсь получить доступ к «MemType» переменному в классе-членов (который является частным атрибутом), потому что я хочу, чтобы сравнить его с «RaceType»

private string MemType; 
    /// <summary> 
    /// Username holds the Members Username (JM6491SHR, MM5642SHR) 
    /// </summary> 
    private string Username; 
    /// <summary> 
    /// Number of races that the racer has run (1, 10, 134) 
    /// </summary> 
    private int NoRacesRun; 
    /// <summary> 
    /// The % of Races that the racer has won (0.0%, 50.6%, 13.8%) 
    /// </summary> 
    private float PerRacesWon; 
    private string MemPic; 
    private string MemClub; 
    private bool Gender; 
    private int MemExp; 

    /// <summary> 
    /// Need a get property for MemType to compare it to a Race type (used for validation) 
    /// </summary> 
    public string memType { get { return MemType; } } 

(Причиной для переменного если «Гонка» и «Член» не являются «старшими», например, член не может участвовать в гонке, так как они не соответствуют требованию типа)

Я использовал геттер (без сеттера), чтобы получить переменную.

Это правильная или неправильная практика? предоставил часть моего кода для моего члена, показывает свойство, которое я использовал.

+2

Хотя, конечно, не обязательно, вы должны, вероятно, всегда пытаться предоставить код, если сможете. То, что вы нам дали, просто недостаточно для нас. –

+0

Добавлен код в основной корпус. –

+0

Да, запрещающие соглашения о кодировании, это нормально. – XtremeBytes

ответ

1

Да Собственность с только геттером будет в порядке для вашего дела. Вместо этого вы можете использовать автоматическую реализованные собственности с частным сеттера, как этот

public string MemType { get; private set } 

Только помните, в соответствии с майкрософт именования - частные члены должно быть _memType и общественные свойства должны начинаться с заглавной буквой, как - MemType. Совсем наоборот, в вашем примере.

+1

потрясающий, спасибо, не был уверен: D –

+1

Не похоже, что сеттер понадобится. Будет также работать, чтобы сделать свойство ReadOnly. –

+0

Если я удаляю приватную переменную 'private string MemType;' в коде OP, я предполагаю, что для этого потребуется установка. atleast в C# 5.0 :) – CarbineCoder

-1

Это правильный путь. Вы могли бы также объявить свою переменную как статическую, но это плохая оценка для этого случая. Для получения дополнительной информации вы должны взглянуть на инкапсуляцию в объектно-ориентированном программировании.

0

Я считаю, что ваши попытки сделать следующее:

public class Example 
{ 
    private string demo; 
    public class Example(string demo) 
    { 
      this.demo = demo; 
    } 

    public string Demo 
    { 
      get { return this.demo; } 
      private set { this.demo = value; } 
    } 
} 

Теперь в совершенно отдельный класс, вы бы:

public class ExampleCont 
{ 
    private Example example; 
    public ExampleCont(Example example) 
    { 
      this.example = example; 
    } 
} 

Теперь на протяжении всего ExampleCont вы можете получить доступ к собственности через example.Demo , Надеюсь, это поможет вам.

Смежные вопросы