我想我一直在互相错误地使用这些术语!

有帮助吗?

解决方案

Iain,这基本上是一个术语问题,尽管“语言不可知”,与此问题相关的标签,与语言/环境相关。

为了设计讨论,属性和实例变量可以互换使用,因为这个想法是属性是描述对象的数据项。

在谈论特定语言时,这两种语言可能会有所不同。例如,在C#中,属性实际上是返回对象的函数,而实例变量是类的非静态成员变量。

其他提示

在C#中完成的代码示例

public class ClassName
{
   private string variable;

   public string property
   {
      get{ return variable; }
      set { variable = value; }
   }
}

在目标c中,属性是一个实例变量,它可以利用重载点运算符来调用其setter和getter。所以my.food =&“cheeseburger”实际上被解释为[my setFood:" cheeseburger"]。这是另一种情况,其中定义绝对不是语言不可知的,因为objective-c定义了@property关键字。

也许那是因为你第一次来自C ++吧?! 在我上学的日子里,我有教授说课堂属性或课程一直都是属性的。自从我搬到Java C#世界以来,我开始听到会员的意见。类成员,实例成员......

然后属性apear!在Java和.NET中。所以我认为你称之为会员更好。他们是实例成员(或称为实例变量)或类成员....

干杯!

一个属性可以,而且我想大多数情况下会返回一个实例变量,但它可以做更多。您可以将逻辑放在属性中,聚合值或更新其他实例变量等。但我认为最好避免这样做。逻辑应该进入方法。

在Java中,我们有一些名为 JavaBeans Properties ,但这基本上是一个实例变量,它遵循其getter和setter的某个命名模式。

除了已经说过的内容之外,在像C#这样的语言中,属性本质上是一个get和set函数。因此,它可以具有除获取/设置之外运行的自定义逻辑。实例变量不能这样做。

属性是与对象关联的某种数据。例如,圆的属性是它的直径,另一个是它的面积。

实例变量是存储在对象中的一段数据。它不一定需要直接与属性对应。例如(heh),圆可以将其半径存储在实例变量中,并基于该半径计算其直径和面积。这三个仍然是属性,但只有半径存储在实例变量中。

有些语言具有“头等”的概念。属性。这意味着对于客户端应用程序,该属性看起来像实例变量一样使用。也就是说,不是编写类似 circle.getDiameter()的东西,而是编写 circle.diameter ,而不是 circle.setRadius(5),你会写 circle.radius = 5

与给出的其他答案相反,我认为成员变量和与语言无关的属性之间存在有用的区别。

这种区别在面向组件的编程中最为明显,它在任何地方都很有用,但在图形用户界面中最容易理解。在这种情况下,我倾向于将组件的设计时配置视为操纵“属性”。一个对象。例如,我通过设置其属性来选择文本输入字段的前景色和背景色,边框样式和字体。虽然这些属性可以在运行时更改,但它们通常不会。在运行时,表示字段内容的不同变量集更有可能被读取和写入。我认为这些信息是“状态”。组件。

为什么这种区别有用?当创建用于将组件布线在一起的抽象时,通常仅“状态”是指状态。变量需要暴露。回到文本字段示例,您可以声明一个提供对当前内容的访问的接口。但是“属性”却属于“属性”。控制组件外观的控件只在具体的实现类上定义。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top