e.g。
[XmlAttribute("Type")]
public string DataTypeString
{
get
{
return _dataType.ToString();
}
set
{
_dataType = Type.GetType(value);
}
}
private Type _dataType;
public Type DataType
{
get { return _dataType; }
set { _dataType = value; }
}
在上面的代码中,第一个属性类型是字符串,但是setter设置,_dataType是System.Type
答案 0 :(得分:3)
你可以并且通常有益于获得属性。
设置属性中的类型转换可能更具反对性。通常期望属性是轻量级的,而不是抛出异常,通常x.YYY=newValue;
期望导致x.YYY==newValue
为真 - 如果发生类型转换,这些可能很难实现。
即。在你的特定例子中允许按字符串设置类型属性感觉是一个坏主意 - x.DataTypeString="42";
的预期行为是什么?您可能需要考虑其他一些方法来启用属性的XML序列化...
答案 1 :(得分:0)
当然可以。这是属性的目的。该物业的使用者无需知道其背后的含义。他/她只是设置或获取一个字符串,这就是他们需要知道的全部内容。
答案 2 :(得分:0)
我猜它没关系,但我更愿意这样做,这不那么奇怪而且不那么冗长:
public void SetDataType(string value) {
_dataType = Type.GetType(value);
}
public void SetDataType(Type value) {
_dataType = value;
}
public Type DataType { get; private set; }
如前所述,为同一个私有变量设置两个getter / setter对似乎很奇怪。
答案 3 :(得分:0)
如果不知道这门课的目的,很难说。但总的来说,我认为我会因为两个属性具有相同的支持字段而感到困惑(因此更改一个属性会影响另一个)。
但也有例外。例如,在Circle类中,我发现同时具有Radius属性和Diameter属性是完全合理的。所以,这又取决于你班级的目的。
此外,在您提供的示例中,DataTypeString
属性似乎没有提供太多好处。如果删除它,呼叫者只需调用
foo.DataType = Type.GetType("System.Int32");
或
string dataTypeString = foo.DataType.ToString()