我班级的计算属性太多了

时间:2014-10-13 13:01:52

标签: c# properties

我的课程有太多相关的计算属性。

我目前保留所有属性都是只读的。

某些属性需要长时间计算,并且在需要相关属性时再次调用它。

如何创建这个复杂的对象。我也希望不应该从外部代码设置这些属性。我需要show hide,因为我是UI的绑定属性。我认为秩序也很重要。 我的班级就像是

     public string A
    {
        get
        {
            return complexMethod();
            ;
        }
    }
    public string B
    {
        get
        {
            if (A == "value")
                return "A";
            else return "B";
            ;
        }

    }

    public bool ShowHideA
    {
        get
        {
            return string.IsNullOrEmpty(A);
            ;
        }
    }

    public bool ShowHideB
    {
        get
        {
            return string.IsNullOrEmpty(B);
            ;
        }
    }


    public string complexMethod()
    {
        string value = "";
        // calculation goes here
        return value;
    }
}

由于

2 个答案:

答案 0 :(得分:0)

很高的顺序不是吗?

扩展方法最酷的一点是你可以使用类型。这非常适合编写外部程序来计算属性值。像这样开始......

public static class XMLibrary
{
    public static MC CalculateValues(this MC myclass)
    {
        //for each property calculate the values here
        if (myclass.Name == string.Empty) myclass.Name = "You must supply a name";
        if (myclass.Next == 0) myclass.Next = 1;
        //when done return the type
        return myclass;
    }
}

public class MC
{
    public string Name { get; set; }

    public int Next { get; set; }
}

public class SomeMainClass
{
    public SomeMainClass()
    {
        var mc = new MC { Name = "test", Next = 0 };
        var results = mc.CalculateValues();
    }
}

还有许多其他方法可以对模型进行类验证,例如数据注释,或IValidatableObject也可以。将验证与课程分开是一个好主意。

//Complex properites are simple
public class MyComplextClass{
 public List<MyThings> MyThings {get;set;}
 public List<FileInfo> MyFiles {get;set;}
 public List<DateTime> MyDates {get;set;}
}

答案 1 :(得分:0)

您需要使用.net:

提供的Lazy类型
Lazy<YourType> lazy = new Lazy<YourType>();

不要从外部代码设置内部属性。