создать свойство для инкапсуляции

когда для Perperty создал приватное поле, это обязательно??

а когда не создавали?

enter code here 

namespace ApplicationStartSample
{
public class Configuration
{
    private Configuration()
    {
    }

    private static Configuration _Current;
    public static Configuration Current
    {
        get
        {
            if (_Current == null)
                _Current = new Configuration();

            return _Current;
        }
    }

    private const string Path = "Software\\MFT\\Registry Sample";

    public bool EnableWelcomeMessage
    {
        get
        {
            return bool.Parse(Read("EnableWelcomeMessage", "false"));
        }
        set
        {
            Write("EnableWelcomeMessage", value.ToString());
        }
    }

    public string Company                      //why do not create private field?
    {
        get
        {
            return Read("Company", "MFT");
        }
        set
        {
            Write("Company", value);
        }
    }

    public string WelcomeMessage
    {
        get
        {
            return Read("WelcomeMessage", string.Empty);
        }
        set
        {
            Write("WelcomeMessage", value);
        }
    }

    public string Server
    {
        get
        {
            return Read("Server", ".\\Sqldeveloper");
        }
        set
        {
            Write("Server", value);
        }
    }

    public string Database
    {
        get
        {
            return Read("Database", "Shop2");
        }
        set
        {
            Write("Database", value);
        }
    }

  private static string Read(string name, string @default)
  {
  RegistryKey key = Registry.CurrentUser.OpenSubKey(Path, false);

  if (key == null)
    return @default;

 try
 {
    string result = key.GetValue(name).ToString();
    key.Close();

    return result;
}
catch
{
    return @default;
}
}

  private static void Write(string name, string value)
 {
 try
{
    RegistryKey key = Registry.CurrentUser.OpenSubKey(Path, true);

    if (key == null)
        key = Registry.CurrentUser.CreateSubKey(Path);

    key.SetValue(name, value);
    key.Close();
}
catch
{
}
}
}
}

person Community    schedule 26.02.2011    source источник
comment
Вы имеете в виду, когда создавать свойство, а не просто использовать поле?   -  person Felice Pollano    schedule 26.02.2011


Ответы (1)


Если вы спрашиваете, можете ли вы удалить приватное поле для вашего свойства Current, вы можете сделать это (хотя оно больше не будет лениво инициализировать Configuration):

public class Configuration
{
    static Configuration()
    {
        Current = new Configuration();
    }

    public static Configuration Current { get; private set; }
}

Примечание. Это автоматически реализуемое свойство, для которого требуется C# 3.0.

Вместо этого вы также можете использовать общедоступное поле (хотя, если вам когда-нибудь понадобится изменить его на свойство, вам нужно будет перекомпилировать все, что его вызывает):

public class Configuration
{
    public static Configuration Current = new Configuration();
}
person Danny Tuppeny    schedule 26.02.2011