我应该把这个getter转换成方法吗

本文关键字:方法 转换 getter 我应该 | 更新日期: 2023-09-27 18:02:50

在过去的几天里,我一直在阅读c#中属性和方法之间的区别以及如何使用它们。我读过的大多数文章/问题都说getter应该是"轻量级的",里面永远不要有大量的逻辑或复杂的操作。

现在我有一个get,我认为它在属性和方法之间,所以我想看看你们的想法,我是否应该把方法改为getter。

也欢迎其他建议:D

public decimal[] getPreprocData
{
    get
    {
        int i = 3;
        decimal[] data = new decimal[9];
        data[0] = (start.Value.Hour * 3600) + (start.Value.Minute * 60);
        data[1] = duration.Value;
        data[2] = flowRate.Value;
        foreach (NumericUpDown nud in gbHTF.Controls.OfType<NumericUpDown>().OrderBy(nud => nud.TabIndex))
        {
            data[i] = nud.Value;
            i++;
        }
        return data;
    }
}

我应该把这个getter转换成方法吗

Properties &Field一般为 Noun methods,functions一般为 Verb

所以,getPreprocData应该是method。因为它表示对象(类)实例上的一个动作。


从我自己的角度来看,由于您的属性从未使用setter,因此使用method总是比property更好。

当没有什么可设置的时候,有一个属性有什么意义?


你的属性可以实现为方法:

public decimal[] GetPreprocData()
{
        int i = 3;
        decimal[] data = new decimal[9];
        data[0] = (start.Value.Hour * 3600) + (start.Value.Minute * 60);
        data[1] = duration.Value;
        data[2] = flowRate.Value;
        foreach (NumericUpDown nud in gbHTF.Controls.OfType<NumericUpDown>().OrderBy(nud => nud.TabIndex))
        {
            data[i] = nud.Value;
            i++;
        }
        return preprocData;
}

这看起来确实应该是一个方法。

你正在做一些初始化,gbHTF.Controls的大小是无限的,所以这个可能会最终是昂贵的。

它也隐藏在一个属性名后面,这个属性名实际上并没有描述你在做什么——这将是一个更好的描述性方法。

将其转换为方法。这里有处理和业务逻辑。

一般来说,我会将属性限制为格式化或组合其他属性,这样您就可以清楚地分离关注点。