2016-11-27 111 views
-1

我確定C#中的問題「類型」。C#重新定義類中的變量

假設我有一個工作名稱爲「item」的類。 這個類有一個字段,如「變量」。 此字段應與我程序中某個元素的字段匹配,例如布爾型int16,int32,int64,double,uint,uint16。

有沒有可能在依賴需求中重新定義變量的類型? 或者還有其他解決這個問題的方法嗎?

我認爲這個變量的定義是var或object,然後將它投影到給定的類型上。

問題是,分配值時檢查的後面沒有超出範圍?

+1

任何問題的項目''類型?我很難理解你的要求。 – jdphenix

+0

請顯示一些如何使用此變量的示例代碼。 – CodeCaster

+0

你應該研究泛型 – Jonesopolis

回答

0

您可以使用泛型或dynamic,具體取決於您想要如何使用Item

要使用泛型方法,定義Item這樣:

class Item<T> { 
    public T Variable { get; set; } 
} 

當你想其Variable是一個int的項目,這樣做:

var intItem = new Item<int>() 
// you can set the Variable property to an int now! 
intItem.Variable = -1; 

當你想其Variable項目是一個字節,這樣做:

var byteItem = new Item<byte>() 
// you can set the Variable property to a byte 
byteItem.Variable = 10; 

而且等等......

這種方法的一個特點是,物品的Variable的類型不能改變,一旦該物品被創建。所以這是不可能的:

intItem.Variable = "Hello"; 

如果你想改變它的類型到別的東西,而無需創建一個新的項目,你應該使用動態變量:

class Item { 
    public dynamic Variable {get; set;} 
} 

你現在可以做這樣的事情:

var myItem = new Item(); 
myItem.Variable = "Hello"; 
myItem.Variable = 10; 

這是基本相同的定義Variableobject,但它節省您的時間object和鑄件之間所需的類型。

而關於檢查值是否超出範圍的擔心,如果使用dynamic,則可能有點難以檢查它。但是我做了這個小測試,發現當值溢出,它只會環繞:

var item = new Item(); 
item.Variable = byte.MaxValue; 
item.Variable++; 
Console.WriteLine(item.Variable); // prints 0 
+0

謝謝,就是這樣。它簡單易用。問候 。 –

+0

@MichałGałkowski如果您認爲我的回答可以回答您的問題,請考慮接受它! – Sweeper

-1

您可以使用泛型。當您使用新類型創建對象時,它將自動在後面的代碼中創建類定義。

public class GenericClass<T> 
{ 
    public T MyProperty { get; set; } 

    public void TestMethod() 
    { 
     Console.WriteLine(MyProperty.ToString()); 
    } 
} 

然後,你可以用它來與不同類型的

 var myIntClass = new GenericClass<int>(); 
     var myStringClass = new GenericClass<string>(); 
     myIntClass.MyProperty = 1; 
     myStringClass.MyProperty = "test"; 

     myIntClass.TestMethod(); 
     myStringClass.TestMethod(); 

你也可以把約束,使通用類必須實現一個特定的接口,是一流的,具有構造函數。 public interface IPrintable void Print(); }

public class GenericClassWithConstraint<T> where T : IPrintable 
{ 
    public T MyProperty { get; set; } 

    void Print() 
    { 
     MyProperty.Print(); 
    } 
} 

您還可以檢查出新的關鍵字動態。它將允許您在運行時處理對象

+1

解釋這是如何工作的,以及爲什麼它回答OP的問題。 –

+0

它確實解決了「或者是否有任何其他方法來解決這個問題?」的概念,但是並沒有真正解決「問題在於分配值的檢查時間稍後沒有超出範圍?考慮..這是實際問題,需要更多的澄清由OP解決..我懷疑'名單>'將是一個範圍,但..但是還沒有。 –