为对象使用300多个属性

时间:2012-06-19 15:43:09

标签: c# .net visual-studio object attributes

只是想问一下在.NET Framewok(C#)中使用具有300多个属性的对象的缺点(我的意思是内存或响应时间)。

我正在考虑将不同类中的属性分开,但我的问题是这些属性之间没有很大的关系。

我不会做任何复杂的计算,我只会填充instatiaded对象的属性并将他发送到另一个程序,这将把他送回去。

您的想法

EDIT

我在运行程序时只有一个对象。

3 个答案:

答案 0 :(得分:10)

最大的缺点:可读性

具有300个属性的类(我假设您的意思是属性,因为.NET属性具有特定的技术含义)太大而无法阅读和理解。如果如您所说,the attributes don't have a big relation between them,您应该查看应该如何分解为更小类的相关项目。

您的描述:

  

我不打算做任何复杂的计算,我只是填充instatiaded对象的属性并将他发送到另一个程序,这将把他送回去。

这似乎表明需要在系统之间进行的DTO(数据传输对象) - 我会再次考虑,您应该考虑将对象分解为多个(因此,如果相关项目发生变化,则无需更改整个界面。)

答案 1 :(得分:1)

没有。我想不是。 Infragistics ultragrid已经超过了近千种属性和方法。而且它正常运行。 现在如果你将10个控件放在你的程序上怎么办?没有区别。 我认为如果您至少有1GB的内存空间,可以安全地假设您可以添加任意数量的内容,

这只是我的近似,你也可以拥有自己的近似值: 1个属性,平均250个字节(1个字符= 2个字节)所以,

1 073 741 824/250字节= 4 294 967.3属性

另外,您还可以将HD的虚拟内存作为备份。

答案 2 :(得分:0)

一个字:抽象

如果你有一个300个属性的巨大类,你的整个项目中只有一个大的抽象抽象。

你可能是唯一一个使用它的人,但可能多年后你必须回去改变一些你可能会感到困惑的东西。

下面这个类很好,但它可以保留一些功能。

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string FullName { get; set; }
    public char Gender { get; set; }
    public string Social { get; private set; }
}

所有这些属性都可以在功能程序中使用,但您可以为自己提供更多功能。

以下示例经过重构,将Social抽象为自己的类SSN

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string FullName { get; set; }
    public char Gender { get; set; }
    public SSN Social { get; private set; }
}

public class SSN
{
    public const int SSN_LENGTH = 9;

    public string FirstThree { get; set; }
    public string MiddleTwo { get; set; }
    public string LastFour { get; set; }

    public SSN(string ssn)
    {
        FirstThree = ssn.Substring(0, 3); 
        MiddleTwo = ssn.Substring(2, 2);
        LastFour = ssn.Substring(5, 4);
    }

    public string ToString(bool format = false)
    {
        string formatDelimiter = "";
        if (format)
        {
            formatDelimiter = "-";
        }

        return FirstThree + formatDelimiter + MiddleTwo + formatDelimiter + LastFour;
    }
}

通过将Social out抽象为SSN课程,我现在可以在社会安全号码上获得更多控制权和附加功能。当我在他们社交的最后四个人中寻找一个人时,我可以轻松地使用以下代码:

string lastFour = "0000";
List<Person> Persons = new List<Person>();
Person foundPerson = Persons.Where(x => x.Social.LastFour == lastFour).First();

这只是一个小例子,它可以扩展到更复杂的部分。这将为系统提供更好的功能,并且也更容易理解。