C# 如何决定在类中使用属性还是方法

C# 如何决定在类中使用属性还是方法,c#,asp.net,unit-testing,C#,Asp.net,Unit Testing,创建一个静态类来编写单元测试。我不确定使用的是静态属性还是静态方法 请查看下面的代码并通知我 1) MailParterDummies(具有静态属性的) 公共静态类MailPartnerDummies { 公共静态IEnumerable MailingPartners { 得到 { int指数=0; IList mailingPartners=新列表(); 对于(int i=0;i\u text.Count()?0:索引; mailingPartner.MailingPartnerID=i+1;

创建一个静态类来编写单元测试。我不确定使用的是静态属性还是静态方法

请查看下面的代码并通知我

1) MailParterDummies(具有静态属性的)

公共静态类MailPartnerDummies
{
公共静态IEnumerable MailingPartners
{
得到
{
int指数=0;
IList mailingPartners=新列表();
对于(int i=0;i<_text.Count();i++)
{
var mailingPartner=新的mailingPartner();
index=index>\u text.Count()?0:索引;
mailingPartner.MailingPartnerID=i+1;
mailingPartner.ContactName=_text[index];
mailingPartner.organizationname=_text[index];
mailingPartner.FullAddress=_text[index];
mailingPartner.Town=_text[index];
mailingPartner.County=_text[index];
mailingPartner.Country=_text[index];
mailingPartner.PostalZipCode=_text[index];
mailingPartner.TelephoneNumber=i+1;
mailingPartner.EmailAddress=_text[index];
mailingPartner.WebsiteAddress=_text[index];
mailingPartner.AddedOn=DateTime.Now;
mailingPartner.AddedBy=_text[index];
mailingPartner.UpdatedOn=DateTime.Now;
mailingPartner.UpdatedBy=_text[index];
mailingPartners.Add(mailingPartners);
索引++;
}
返回邮件合作伙伴;
}
}
#区域伪变量
私有只读静态字符串[]_text={“Test1”、“Test2”、“Test3”};
#端区
}
2) MailParterDummies(使用静态方法的一个)

公共静态类MailPartnerDummies
{        
公共静态IEnumerable MailingPartnerList()
{
int指数=0;
IList mailingPartners=新列表();
对于(int i=0;i<_text.Count();i++)
{
var mailingPartner=新的mailingPartner();
index=index>\u text.Count()?0:索引;
mailingPartner.MailingPartnerID=i+1;
mailingPartner.ContactName=_text[index];
mailingPartner.organizationname=_text[index];
mailingPartner.FullAddress=_text[index];
mailingPartner.Town=_text[index];
mailingPartner.County=_text[index];
mailingPartner.Country=_text[index];
mailingPartner.PostalZipCode=_text[index];
mailingPartner.TelephoneNumber=i+1;
mailingPartner.EmailAddress=_text[index];
mailingPartner.WebsiteAddress=_text[index];
mailingPartner.AddedOn=DateTime.Now;
mailingPartner.AddedBy=_text[index];
mailingPartner.UpdatedOn=DateTime.Now;
mailingPartner.UpdatedBy=_text[index];
mailingPartners.Add(mailingPartners);
索引++;
}
返回邮件合作伙伴;
}
#区域伪变量
私有只读静态字符串[]_text={“Test1”、“Test2”、“Test3”};
#端区
}
我应该使用1)还是2)? 谢谢。

使用该方法

根据微软的Rico Mariani的说法,除了返回请求的值之外,属性不应该做任何其他事情。如果您需要进行任何数据处理(在示例中就是这样做的),请使用方法

通过这样做,您可以清楚地与调用代码进行通信,有一些工作正在幕后进行

请看Rico的文章:

引述:

所以,在使用属性时,最重要的是要记住 从各个方面看,它都将非常像一个领域。它看起来像一辆汽车 场,感觉像场,人们会期望它表现得像场 领域因此,考虑到这一点:

  • 访问属性时不应分配任何内存;人们将在遍历任何数据结构的循环中使用它 您在演示时,他们希望这些数据被放在周围 正在访问

  • 访问属性不应“同步”-如果要执行任何锁定,则应在比单个锁定更高的级别执行 字段,在您获取任何对象的属性时 它,它应该已经是安全的阅读它

  • 在阅读属性时,访问属性不应进行任何I/O,尤其是任何网络I/O,请参见上文 提供它的对象应该已经完成了所需的任何I/O操作

  • 访问属性不应是复杂度大于O(1)的操作,这意味着没有循环。完全你可以跟我讨价还价 高达O(lg(N)),如果我们谈论的是一个 “索引器”,但没有更高。 访问属性不应有副作用(即,严格来说,它是一个读取操作,不会改变任何内容)

剩下的就是可以使用对象状态和 参数(如果是索引器)执行固定时间查找,或在 最糟糕的情况是,在已经存在的数据结构中,并立即返回 结果呢。就这样


你写这篇文章是为了支持一个测试,所以我将讨论如何使测试更具可读性。在你的情况下,这并不重要,使用你想要的任何东西:)
public static class MailPartnerDummies
{
    public static IEnumerable<MailingPartner> MailingPartners
    {
        get
        {
            int index = 0;
            IList<MailingPartner> mailingPartners = new List<MailingPartner>();
            for (int i = 0; i < _text.Count(); i++)
            {
                var mailingPartner = new MailingPartner();

                index = index > _text.Count() ? 0 : index;

                mailingPartner.MailingPartnerID = i + 1;
                mailingPartner.ContactName = _text[index];
                mailingPartner.OrganisationName = _text[index];
                mailingPartner.FullAddress = _text[index];
                mailingPartner.Town = _text[index];
                mailingPartner.County = _text[index];
                mailingPartner.Country = _text[index];
                mailingPartner.PostalZipCode = _text[index];
                mailingPartner.TelephoneNumber = i + 1;
                mailingPartner.EmailAddress = _text[index];
                mailingPartner.WebsiteAddress = _text[index];
                mailingPartner.AddedOn = DateTime.Now;
                mailingPartner.AddedBy = _text[index];
                mailingPartner.UpdatedOn = DateTime.Now;
                mailingPartner.UpdatedBy = _text[index];

                mailingPartners.Add(mailingPartner);
                index ++;
            }

            return mailingPartners;
        }
    }



    #region fake variables

    private readonly static string[] _text = { "Test1", "Test2", "Test3" };

    #endregion
}
public static class MailPartnerDummies
{        
    public static IEnumerable<MailingPartner> MailingPartnerList()
    {
        int index = 0;
        IList<MailingPartner> mailingPartners = new List<MailingPartner>();
        for (int i = 0; i < _text.Count(); i++)
        {
            var mailingPartner = new MailingPartner();

            index = index > _text.Count() ? 0 : index;

            mailingPartner.MailingPartnerID = i + 1;
            mailingPartner.ContactName = _text[index];
            mailingPartner.OrganisationName = _text[index];
            mailingPartner.FullAddress = _text[index];
            mailingPartner.Town = _text[index];
            mailingPartner.County = _text[index];
            mailingPartner.Country = _text[index];
            mailingPartner.PostalZipCode = _text[index];
            mailingPartner.TelephoneNumber = i + 1;
            mailingPartner.EmailAddress = _text[index];
            mailingPartner.WebsiteAddress = _text[index];
            mailingPartner.AddedOn = DateTime.Now;
            mailingPartner.AddedBy = _text[index];
            mailingPartner.UpdatedOn = DateTime.Now;
            mailingPartner.UpdatedBy = _text[index];

            mailingPartners.Add(mailingPartner);
            index++;
        }

        return mailingPartners;
    }


    #region fake variables

    private readonly static string[] _text = { "Test1", "Test2", "Test3" };

    #endregion
}