【发布时间】:2016-11-18 17:23:49
【问题描述】:
什么时候在 C# 中使用方法和属性? 他们可以做同样的事情,但何时使用它们。 是否可以通过 C# 属性而不是单个值来设置整个对象?
【问题讨论】:
-
推荐一本好书
-
简化:属性 = 你所拥有的。方法 = 你可以用你拥有的东西做什么......
标签: c# c#-4.0 methods properties c#-3.0
什么时候在 C# 中使用方法和属性? 他们可以做同样的事情,但何时使用它们。 是否可以通过 C# 属性而不是单个值来设置整个对象?
【问题讨论】:
标签: c# c#-4.0 methods properties c#-3.0
属性或多或少是我们用来描述一个类的不同事物的东西。它们让我们定义一个类可以做什么,以及该类的本质是什么。考虑以下几点:
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!
【讨论】:
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 未显示,因为它是私有的,对外不可见,而是生成的。'
【讨论】: