我确定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