【问题标题】:C# How correctly work get and set?C# 如何正确工作获取和设置?
【发布时间】:2015-04-15 14:03:35
【问题描述】:

我是编程初学者,我想问你可能是最简单的问题。
我做了这样的事情:

class person
{
    private string name;
    public string surname;
    private int year;       
}

class student : person
{

}

class Program
{
    static void Main(string[] args)
    {
        List<student> list = new List<student>();

        list.Add(new student()
            {
                surname = "jordan"
            //    name ... ???
            //    year .. ?
            });
    }
}

如果我有private 字段,如何正确使用getset,或者如何为nameyear 赋值?

【问题讨论】:

  • 如果我想要私有字段,没有别的办法吗?
  • 您可以创建属性,或从构造函数中设置它们。公共字段也被认为是错误的形式,您应该更喜欢公共属性。
  • 跑步,不要走路,通过 C# 购买 CLR。跳过前两章,开始阅读。你会感谢我的。
  • 修正错别字。更改格式(“bla”-> bla)。

标签: c# list get


【解决方案1】:

你可以像这样在构造函数中设置私有属性:

public class person
{
    private string name { get; set; };
    public string surname { get; set; };
    private int year { get; set; };

    public person(string name, int year)
    {
        this.name = name;
        this.year = year;
    }
}
public class student : person
{
    public student(string name, int year) : base (name, year) { };
}

使用可以是:

list.Add(new student("name", 45)
{
    surname = "jordan"
});

【讨论】:

    【解决方案2】:

    (注意类和属性使用大写,字段和局部变量保留小写)。

    声明为public properties 像这样:

    class Person
    {
        public string Surname {get; set;}
    }
    

    用法:

    new Person{
       Surname = "jordan"
    };
    

    或使用private setter,并在构造函数中设置。

    class Person
    {
        public Person(string surname)
        {
           Surname = surname;
        }
    
        public string Surname {get; private set;}        
    }
    

    用法:

    new Person("jordan");
    

    private 字段,也在构造函数中设置(相同用法)。

    class Person
    {
        private string surname;
    
        public Person(string surname)
        {
           this.surname = surname;
        }
    
        public string Surname {get{return surname;}}        
    }
    

    【讨论】:

      【解决方案3】:

      即使字段是私有的,您也可以提供公共属性。无论如何,您都应该这样做,因为这些字段不应从外部访问,如果它们只是属性的支持字段,则更是如此。

      class person
      {
          private string name;
          public string Name 
          {
              get { return name; }
              set { name = value; }
          }
      
          private string surname;
          public string Surname
          {
              get { return surname; }
              set { surname = value; }
          }
      
          private int year;
          public int Year
          {
              get { return year; }
              private set { year = value; }
          }
      }
      

      现在这些字段是私有的,您可以根据需要更改属性的访问修饰符。您甚至可以将 setter 设为私有,如 Year 属性所示。

      List<Person> list = new List<Person>();
      list.Add(new Person()
      {
          Name = "Michael",
          Surname = "jordan",
      });
      

      现在您不能从外部修改Year,因为它是private。你可以提供一个合适的构造函数来初始化它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-28
        • 1970-01-01
        • 1970-01-01
        • 2011-09-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多