C#Class Public Property:getter和setter在这里做正确的事吗?

时间:2011-09-04 09:06:51

标签: c# oop setter getter

我有一个如下所示的课程;

public class AccommPropertyRepository : IAccommPropertyRepository {

    public AccommPropertyRepository() { 
    }

    public AccommPropertyRepository(int _accommPropertyID) {
        accommPropertyID = _accommPropertyID;
    }

    private readonly int accommPropertyID;
    private Guid _accommpropertyguid;

    public AccommProperty GetSingle(int id) { 

      //Logic sits here and returns single AccommProperty class

    }

    public Guid AccommPropertyGUID {

        get {

            var model = GetSingle(accommPropertyID);
            _accommpropertyguid = model.AccommPropertyGUID;

            return _accommpropertyguid;
        }
        set {
        }
    }

}

如您所见,有一个名为AccommPropertyGUID的公共财产。我已经测试了代码,它返回它应该的内容,但我不确定我的代码是以正确的方式编写的。

我是否在这里实施了这个结构?

更新

我的目标是能够按如下方式调用此类;

var poo = new AccommPropertyRepository(1000);
var pooGUID = poo.AccommPropertyGUID;

4 个答案:

答案 0 :(得分:4)

虽然问题是关于这里的属性,但如果你看一个很抽象的层次,即在班级你会发现一些奇怪的东西。该类用于表示AccomProperty的存储库。现在,它是一个简单的存储库定义,它存储(由底层持久存储抽象)特定类型的对象,并允许您对这些对象执行某些操作(如访问,删除等)。所以使用像

这样的存储库
var poo = new AccommPropertyRepository(1000);
var pooGUID = poo.AccommPropertyGUID;

在我的POV中不是一个好主意。由于此代码表示您正在创建存储库对象以仅访问具有标识1000的特定住房属性对象,其中存储库应允许访问基础存储对象而不仅仅访问单个对象。使用存储库的更好方法是:

var repo = new AccommPropertyRepository(repInitializationData) //initialization data can be something like conn string etc
var pooGUID = repo.GetAccommProperty(1000).GUID

这样访问GUID属性是对象的一部分而不是存储库的一部分,因为属性是实际对象而不是存储库的责任。存储库只是为了允许您访问底层的对象集。

我希望这是有道理的。

答案 1 :(得分:2)

你的二传手看起来不对。您需要在其中设置_accommpropertyguid或完全删除它。您可以在传入的值上添加验证。您需要决定是否要在该属性上设置一个setter。这是最简单的实现:

set { _accommpropertyguid = value; } 

getter对我来说看起来不错,但是在不了解GetSingle的实现的情况下很难说清楚。

一般来说,使用getter应该没有任何副作用,它应该是 fast

答案 2 :(得分:0)

它看起来很好,如果你想要一个清晰的代码,你可以删除空的set block。

但如果没有分配“accommPropertyID”,我不确定会发生什么? 你有2个构造函数,第一个没有任何赋值给“accommPropertyID” 这样你的一些功能可能会出错。您可以使用try-catch博客或您 必须为“accommPropertyID”指定默认值,否则必须删除第一个 构造

答案 3 :(得分:0)

我认为你应该这样做

public Guid AccommPropertyGUID 
{
    get 
    {
         if(null != _accommpropertyguid)
             {
                 var model = GetSingle(accommPropertyID);
                 _accommpropertyguid = model.AccommPropertyGUID;
             }

          return _accommpropertyguid;
    }
}

通过这种方式,您不必每次都重新计算_accommpropertyguid值