【问题标题】:C# Methods and Properties [closed]C# 方法和属性 [关闭]
【发布时间】:2016-11-18 17:23:49
【问题描述】:

什么时候在 C# 中使用方法和属性? 他们可以做同样的事情,但何时使用它们。 是否可以通过 C# 属性而不是单个值来设置整个对象?

【问题讨论】:

标签: c# c#-4.0 methods properties c#-3.0


【解决方案1】:

属性或多或少是我们用来描述一个类的不同事物的东西。它们让我们定义一个类可以做什么,以及该类的本质是什么。考虑以下几点:

    namespace Example
    {
        public class Person
        {
            public string Name { get; set; }
            public int Age { get; set; }
            public DateTime Birthday { get; set; }
        }
    }

姓名、年龄和生日将被视为 Person 类的属性。他们定义了一个人是什么,并为我们提供了一种赋予班级价值的方法。然后将使用一种方法对属性执行各种操作。您可以编写一个方法来获取或设置属性的值,例如:

public string GetName()
{
    return Name;
}

public void SetName(string name)
{
    Name = name;
}

但是,考虑到 Name 属性是公共的,这将毫无意义,这意味着只要我们创建 Person 类的实例就可以访问它。如果我们想设置 Name 属性,将使用上述方法,但保持私有。另一个方法的例子是,如果我们想要一种方法来创建 person 类的新实例。默认情况下,Visual Studio 会让你像这样实例化一个新的 Person 对象:

Person jim = new Person();

但是我们也可以编写自己的“构造函数”方法来允许我们创建一个新的 Person 并同时设置它的属性。

public Person(string name, int age, DateTime birthday)
{
    Name = name;
    Age = age;
    Birthday = birthday;
}

现在我们有了一种简单、流线型的方法来实例化一个新的 Person 对象,它使用构造方法,我们可以像这样创建一个新的 Person 对象:

Person jim = new Person("Jim", 25, DateTime.Today);

但是方法的使用并不止于此。由于 DateTime 是我们表示生日属性的方式,因此我们可以编写一个可以将字符串转换为适当的 DateTime 的方法。

public DateTime ConvertToDateTime(string date)
{
      DateTime temp;

      DateTime.TryParse(date, out temp);

      return temp
}

现在我们可以将构造函数更改为如下所示:

public Person(string name, int age, string birthday)
{
    Name = name;
    Age = age;
    Birthday = ConvertToDateTime(birthday);
}

并且可以像这样实例化一个新的 Person 对象:

Person jim = new  Person("Jim", 25, "1/10/1995");

最后,正如@vivek nuna 所说,找一本好书!我在以前的 C# 课程中使用过的一个很棒的方法是 Murach's book on C#。此外,MSDN.com 拥有学习如何使用 C# 进行编码所需的所有文档。试试这个link 来了解更多关于属性的信息,或者试试这个link 来了解更多关于方法的信息。最后,我发现一个学习 C# 的优秀教程是Scott Lilly's Guide to C#。您不仅会学习 C# 的来龙去脉,还将构建一个非常简洁明了的基于文本的 RPG!

【讨论】:

    【解决方案2】:

    proppertie 只是一个简写,它会在后台创建一个公共 get 方法和一个公共 set 方法和一个私有字段来存储值。

    // example propertie
    public string Name { get; set; }
    
    // at run time it is the same as:
    private string Name;
    
    public string GetName(){
      return this.Name;
    }
    
    public string SetName(string name){
      this.Name = name;
    }
    

    查看图片:示例类仅在代码中具有属性,但如果您使用反射将所有成员从示例类中移除,您将看到在运行时生成这些方法但不可见在代码中。

    set_name() get_name()

    '请注意,私有字段 Name 未显示,因为它是私有的,对外不可见,而是生成的。'

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-30
      相关资源
      最近更新 更多