我的课程有太多相关的计算属性。
我目前保留所有属性都是只读的。
某些属性需要长时间计算,并且在需要相关属性时再次调用它。
如何创建这个复杂的对象。我也希望不应该从外部代码设置这些属性。我需要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;
}
}
由于
答案 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>();
不要从外部代码设置内部属性。