方法或财产?

Nic*_*ull 2 c# methods properties

我有一个类,我将其称为SpiderNest具有类型属性的类List<Spider>,其中Spider是一种具有类型属性的对象int; 我们称之为这个属性NumberOfLegs.我想要一个方法或SpiderNest类的属性来获得我巢中所有蜘蛛的腿数总和.

是否首选使用这样的属性(原谅糟糕的对象命名):

class SpiderNest {
    // Our example property.
    public List<Spider> Spiders { get; set; }

    public int TotalLegNumber 
    { 
        get { return Spiders.Sum(spider => spider.NumberOfLegs); } 
    }
Run Code Online (Sandbox Code Playgroud)

还是方法?

class SpiderNest {
    public List<Spider> Spiders { get; set; }

    public int GetTotalNumberOfLegs() 
    {
        return Spiders.Sum(spider => spider.NumberOfLegs);
    }
}
Run Code Online (Sandbox Code Playgroud)

你为什么选择这种方式?我知道这个问题可能很棘手,但每当我提出两种做事方式时,每种做事方式通常都会带来好处.谢谢!

Jus*_*tin 5

该方法没有副作用,但是如果Spiders很大则可能是计算上昂贵的.如果Spiders很大那么它应该是一个方法,否则使它成为一个属性.

  • 为贾斯汀的回答添加一些澄清:当你将某个东西作为一个属性实现时,你向你的类消费者暗示这是一个相对便宜和简单的操作.这不是一成不变的,但是当看到`NumberOfLegs`属性或`GetNumberOfLegs()`方法时,我对后者的直觉告诉我这是一个昂贵的操作,其结果应该被缓存,而前者应该是可以重复的.要意识到这些期望. (4认同)