2011-10-29 74 views
1

例如讓一個setter設置不同於屬性類型的類型是否正確?

[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; } 
    } 

在上面的代碼中,第一屬性類型是串,然而,設定器套,其是System.Type的

+1

這不是屬性的全部點 - 它們提供了基礎字段的抽象級別。 – James

+4

對我來說似乎有一個屬性有兩個getter/setter,雖然 –

回答

0

當然可以的_dataType。這是屬性的目的。該屬性的用戶不需要知道它背後的內容。他/她只是設置或得到一個字符串,這就是他們需要知道的。

+0

嗯,如果沒有找到類型,這可能會導致將null值分配給該字段。這可能會導致一個棘手的錯誤。 –

+0

@Kirk,通過拋出異常很容易修復。 –

+1

@MatthewFlaschen @MatthewFlaschen我們並不是真的想在屬性中拋出異常 – James

3

您可以並且經常爲取得屬性這麼做。

集合屬性中的類型轉換可能會更加矛盾。屬性通常要求輕量級,而不是拋出異常,通常x.YYY=newValue;預期會導致x.YYY==newValue爲真 - 如果發生類型轉換,這些可能很難實現。

I.e.在你的特定示例中,允許通過字符串設置類型,因爲屬性感覺是一個糟糕的主意 - x.DataTypeString="42";的預期行爲是什麼?你可能要考慮一些其他的方式,以使你的財產的XML序列化...

+0

這完全正確。但這就是爲什麼使用財產可能是件好事。他可以驗證該字符串是否與屬性內的有效類型相對應,以便每次需要分配時都不必在該屬性之外執行該操作。 –

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對似乎相當奇怪。

0

很難說不知道這堂課的目的。但總的來說,我認爲我會因爲擁有兩個具有相同支持字段的屬性而感到困惑(以便更改一個會影響另一個屬性)。

雖然有例外。例如,在一個Circle類中,我會發現擁有一個Radius屬性和一個Diameter屬性是完全合理的。再說一次,這取決於你班上的目的。

此外,在您提供的示例中,似乎並不像DataTypeString屬性提供了很多好處。如果你刪除它,呼叫者可以通過簡單地調用

foo.DataType = Type.GetType("System.Int32"); 

string dataTypeString = foo.DataType.ToString() 

達到同樣的效果。

相關問題