我确定 C# 中的问题“类型”。
假设我有一个工作名称为“item”的类。此类具有诸如“变量”之类的字段。该字段应与我程序中某个元素的字段匹配,例如 Boolean int16、int32、int64、double、uint、uint16。
是否有可能重新定义依赖需求中的变量类型?或者有没有其他方法可以解决这个问题?
我考虑将此变量定义为 var 或 object,然后将其投影到给定类型上。
问题是后面的检查赋值时不超出范围?
您可以使用泛型。当您创建具有新类型的对象时,它将自动在代码中创建一个类定义。
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();
您还可以设置约束,以便泛型类必须实现特定接口,成为类,具有构造函数。公共接口 IPrintable { void Print(); }
public class GenericClassWithConstraint<T> where T : IPrintable
{
public T MyProperty { get; set; }
void Print()
{
MyProperty.Print();
}
}
您还可以查看新的关键字dynamic。它将允许您在运行时处理对象
您可以使用泛型,也可以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
这与定义as基本相同object
,但它节省了您object
在所需类型之间转换的时间。
并且关于您担心检查该值是否超出范围,如果您使用dynamic
. 但是我做了这个小测试,发现当值溢出时,它只会环绕:
var item = new Item();
item.Variable = byte.MaxValue;
item.Variable++;
Console.WriteLine(item.Variable); // prints 0