我確定C#中的問題「類型」。C#重新定義類中的變量
假設我有一個工作名稱爲「item」的類。 這個類有一個字段,如「變量」。 此字段應與我程序中某個元素的字段匹配,例如布爾型int16,int32,int64,double,uint,uint16。
有沒有可能在依賴需求中重新定義變量的類型? 或者還有其他解決這個問題的方法嗎?
我認爲這個變量的定義是var或object,然後將它投影到給定的類型上。
問題是,分配值時檢查的後面沒有超出範圍?
我確定C#中的問題「類型」。C#重新定義類中的變量
假設我有一個工作名稱爲「item」的類。 這個類有一個字段,如「變量」。 此字段應與我程序中某個元素的字段匹配,例如布爾型int16,int32,int64,double,uint,uint16。
有沒有可能在依賴需求中重新定義變量的類型? 或者還有其他解決這個問題的方法嗎?
我認爲這個變量的定義是var或object,然後將它投影到給定的類型上。
問題是,分配值時檢查的後面沒有超出範圍?
您可以使用泛型或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;
這是基本相同的定義Variable
爲object
,但它節省您的時間object
和鑄件之間所需的類型。
而關於檢查值是否超出範圍的擔心,如果使用dynamic
,則可能有點難以檢查它。但是我做了這個小測試,發現當值溢出,它只會環繞:
var item = new Item();
item.Variable = byte.MaxValue;
item.Variable++;
Console.WriteLine(item.Variable); // prints 0
謝謝,就是這樣。它簡單易用。問候 。 –
@MichałGałkowski如果您認爲我的回答可以回答您的問題,請考慮接受它! – Sweeper
您可以使用泛型。當您使用新類型創建對象時,它將自動在後面的代碼中創建類定義。
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();
}
}
您還可以檢查出新的關鍵字動態。它將允許您在運行時處理對象
解釋這是如何工作的,以及爲什麼它回答OP的問題。 –
它確實解決了「或者是否有任何其他方法來解決這個問題?」的概念,但是並沒有真正解決「問題在於分配值的檢查時間稍後沒有超出範圍?考慮..這是實際問題,需要更多的澄清由OP解決..我懷疑'名單
任何問題的項目''類型?我很難理解你的要求。 –
jdphenix
請顯示一些如何使用此變量的示例代碼。 – CodeCaster
你應該研究泛型 – Jonesopolis