我读了一些关于属性vs方法的帖子,但我不确定,哪种方式对我来说是正确的。
我应该使用属性来返回带有UserData的Dictionary还是应该使用Method,因为它是一个数据集合,当然例外情况可能是由例如遗失文件
class UsersData
{
public int UserID { get; set; }
public string UserName { get; set; }
public string UserPassWord { get; set; }
}
class Test
{
public Dictionary<int, UsersData> Users
{
get
{
return ReadXMLDict(filename);
}
private set
{ }
}
public string filename { get; set; }
public Test()
{
}
private Dictionary<int, UsersData> ReadXMLDict(string filename)
{
Dictionary<int, UsersData> result;
if (!string.IsNullOrEmpty(filename))
{
var XDoc = XDocument.Load(filename).Element("UsersTable");
result = XDoc
.Descendants("Users")
.ToDictionary(x => int.Parse(x.Element("UserID").Value),
(x => new UsersData
{
UserID = int.Parse(x.Element("UserID").Value),
UserName = x.Element("UserName").Value,
UserPassWord = x.Element("UserPassWord").Value
}));
return result;
}
else
{
return null;
}
}
}
答案 0 :(得分:1)
属性是语法糖。它们被编译成方法,它们的工作方式与方法相同(在您的情况下,filename
属性被编译为两种方法:get_filename
,set_filename
)。
你可以捕捉异常,处理它们以及setter或getter中的许多其他东西,因为它们是方法。
顺便说一句,如果获取数据并填写整个字典需要输入参数,则应该使用方法(没有属性!)。
另一方面,如果有很多方法可能需要一个公共参数,那么定义一个属性来保存该参数并稍后在其他属性或方法中使用它可能没什么问题:
public class A
{
public string Param1 { get; set; }
public string PropertyA
{
get
{
// Uses "Param1"
return ...;
}
}
public void Method1()
{
// Uses "Param1" somewhere...
}
public void Method2()
{
// Uses "Param1" somewhere...
}
public void MethodN()
{
// Uses "Param1" somewhere...
}
}