C# 属性与方法

C# 属性与方法,c#,properties,methods,C#,Properties,Methods,快速提问:您何时决定使用属性(在C#中)以及何时决定使用方法 我们正忙着进行这场辩论,并发现在某些领域,我们是否应该使用属性或方法存在争议。一个例子是: public void SetLabel(string text) { Label.Text = text; } 在本例中,Label是ASPX页面上的控件。是否有一个原则可以控制决定(在本例中)是否将其作为方法或属性 我会接受最一般、最全面的答案,但这也涉及到我给出的示例。是的,如果您所做的只是获取和设置,请使用属性 如果您正在执行

快速提问:您何时决定使用属性(在C#中)以及何时决定使用方法

我们正忙着进行这场辩论,并发现在某些领域,我们是否应该使用属性或方法存在争议。一个例子是:

public void SetLabel(string text)
{
    Label.Text = text;
}
在本例中,
Label
是ASPX页面上的控件。是否有一个原则可以控制决定(在本例中)是否将其作为方法或属性


我会接受最一般、最全面的答案,但这也涉及到我给出的示例。

是的,如果您所做的只是获取和设置,请使用属性

如果您正在执行可能会影响多个数据成员的复杂操作,则使用方法更合适。或者,如果getter接受参数,或者setter接受的参数多于值参数

中间是一个灰色区域,线条可能有点模糊。没有硬性规定,不同的人有时会不同意某个东西是属性还是方法。重要的是(相对地)与你做这件事的方式(或你的团队做这件事的方式)保持一致

它们在很大程度上是可互换的,但一个属性向用户发出信号,表示实现相对“简单”。哦,而且语法有点简洁


一般来说,我的理念是,如果您开始编写一个以get或set开头的方法名,并分别接受零个或一个参数,那么它就是属性的主要候选对象。

我更喜欢将属性用于带有1参数的add/set方法。如果参数更多,请使用方法。

属性只能简单设置并获取一行程序。任何更多的,它应该真正地移动到一个方法。复杂代码应该始终在方法中。

如果要设置对象的实际属性,则使用属性

如果您正在执行任务/功能,则使用方法

在您的示例中,它是一个正在设置的确定属性


但是,如果您的功能是附加标签,那么您将使用一种方法。

属性非常好,因为它们可以在visual studio的visual designer中访问,只要它们具有访问权限

如果您仅仅是设置和获取,或者是一些无法访问大量代码的验证,那么就可以使用它们。要小心,因为在验证期间创建复杂对象并不简单

任何其他方法都是首选方法

这不仅仅是语义问题。使用不适当的属性会在VisualStudio visual designer中出现奇怪的情况

例如,我在一个类的属性中得到一个配置值。configuration类实际上打开一个文件并运行sql查询以获取该配置的值。这在我的应用程序中导致了一些问题,其中配置文件将由VisualStudio本身而不是我的应用程序打开和锁定,因为它不仅在读取配置值,而且在写入配置值(通过setter方法)。要解决这个问题,我只需将其更改为一个方法。

来自开发类库的设计指南部分:

通常,方法表示动作,属性表示数据。属性应该像字段一样使用,这意味着属性不应该计算复杂或产生副作用。当它不违反以下准则时,考虑使用属性,而不是方法,因为经验不足的开发人员发现属性更易于使用。
我仅对变量访问使用属性,即获取和设置单个变量,或获取和设置控件中的数据。只要需要/执行任何类型的数据操作,我就使用方法。

您只需查看名称即可。。。“财产”。这是什么意思?字典对它的定义有很多种,但在这种情况下,“一件事物的本质或独特属性或性质”最合适

想想行动的目的。事实上,你是否在改变或恢复“一个基本或独特的属性”?在您的示例中,您使用一个函数来设置文本框的属性。这似乎有点傻,不是吗

属性实际上是函数。它们都编译为getXXX()和setXXX()。它只是把它们隐藏在语法的糖分中,但糖分为这个过程提供了语义意义

考虑属性之类的属性。汽车有许多特性。颜色、MPG、型号等。。并非所有属性都是可设置的,有些属性是可计算的

同时,方法就是行动。GetColor应该是一个属性。GetFile()应该是一个函数。另一个经验法则是,如果它不改变对象的状态,那么它应该是一个函数。例如,CalculationDigit(n)应该是一个函数,因为它实际上并没有改变它所附加到的数学对象的状态


这可能有点杂乱无章,但它实际上可以归结为决定对象是什么以及它们代表什么。如果您不能确定它是属性还是函数,那么选择哪一个可能无关紧要。

Symantically属性是对象的属性。 方法是对象的行为

标签是一个属性,将其作为属性更有意义

在面向对象编程方面,您应该清楚地了解什么是行为的一部分,什么仅仅是属性

汽车{颜色、型号、品牌}

汽车具有颜色、型号和品牌属性,因此使用方法SetColor或SetModel是没有意义的,因为我们并不要求汽车设置自己的颜色


因此,如果您将属性/方法案例映射到现实生活中的对象,或者从symantic的角度来看它,您的困惑就会消失。

属性是从对象中注入或检索数据的一种方式。它们在变量或变量上创建抽象
public Label Title 
{
   get{ return titleLabel;}
   set{ titleLabel = value;}
}
Title.Text = "Properties vs Methods";
public string Title 
{
   get{ return titleLabel.Text;}
   set{ titleLabel.Text = value;}
}
Title = "Properties vs Methods";
public String Title
{
    set { Label.Text = text; }
}