当前位置:  开发笔记 > 编程语言 > 正文

在.NET中公开成员对象作为属性或方法

如何解决《在.NET中公开成员对象作为属性或方法》经验,为你挑选了2个好方法。

在.NET中,如果一个类包含一个类对象的成员,那么该成员是应该作为属性公开还是使用方法公开?



1> bdukes..:

您应该将属性用于概念上表示对象状态的任何内容,只要它的检索不是足够昂贵的操作,您应该避免重复使用它.

来自MSDN:

类库设计者通常必须决定将类成员实现为属性还是方法.通常,方法表示动作,属性表示数据.使用以下准则可帮助您选择这些选项.

当成员是逻辑数据成员时,请使用属性.在以下成员声明中,Name是属性,因为它是类的逻辑成员.

public string Name
get 
{
    return name;
}
set 
{
    name = value;
}

使用方法时:

该操作是转换,例如Object.ToString.

操作非常昂贵,您希望与用户通信他们应该考虑缓存结果.

使用get访问器获取属性值会产生可观察到的副作用.

连续两次调用该成员会产生不同的结果.

执行顺序很重要.请注意,应该能够以任何顺序设置和检索类型的属性.

该成员是静态的,但返回一个可以更改的值.

该成员返回一个数组.返回数组的属性可能会产生误导.通常需要返回内部数组的副本,以便用户无法更改内部状态.这与用户可以轻易地认为它是索引属性的事实相结合,导致代码效率低下.在下面的代码示例中,每次对Methods属性的调用都会创建数组的副本.结果,将在以下循环中创建2n + 1个阵列副本.

Type type = // Get a type.
for (int i = 0; i < type.Methods.Length; i++)
{
   if (type.Methods[i].Name.Equals ("text"))
   {
      // Perform some operation.
   }
}

以下示例说明了属性和方法的正确用法.

    class Connection
    {
       // The following three members should be properties
       // because they can be set in any order.
       string DNSName {get{};set{};}
       string UserName {get{};set{};}
       string Password {get{};set{};}

       // The following member should be a method
       // because the order of execution is important.
       // This method cannot be executed until after the 
       // properties have been set.
       bool Execute ();
    }



2> Eric Schoono..:

如果你所做的只是暴露一个与当前对象状态相关的对象实例,你应该使用一个属性.

当您有一些逻辑不仅仅是访问内存对象并返回该值时,或者当您执行的操作对当前对象的状态有广泛影响时,应该使用一种方法.

推荐阅读
爱唱歌的郭少文_
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有