C#在类中重新定义变量

C#在类中重新定义变量,c#,types,casting,redefine,C#,Types,Casting,Redefine,我对C#中的问题“类型”很有把握 假设我有一个工作名为“item”的类。 此类有一个字段,如“variable”。 此字段应与程序中某个元素的字段匹配,例如布尔值int16、int32、int64、double、uint、uint16 是否有可能在依赖需求中重新定义变量的类型? 或者有没有其他办法解决这个问题 我考虑将这个变量定义为var或object,然后将其投影到给定的类型上 问题是,在分配值时,后面的检查是否不超过范围 您可以使用泛型。当您使用新类型创建对象时,它将自动在代码隐藏中创建类定

我对C#中的问题“类型”很有把握

假设我有一个工作名为“item”的类。 此类有一个字段,如“variable”。 此字段应与程序中某个元素的字段匹配,例如布尔值int16、int32、int64、double、uint、uint16

是否有可能在依赖需求中重新定义变量的类型? 或者有没有其他办法解决这个问题

我考虑将这个变量定义为var或object,然后将其投影到给定的类型上


问题是,在分配值时,后面的检查是否不超过范围

您可以使用泛型。当您使用新类型创建对象时,它将自动在代码隐藏中创建类定义

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

    public void TestMethod()
    {
        Console.WriteLine(MyProperty.ToString());
    }
}
公共类GenericClass
{
公共MyT属性{get;set;}
公共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();
var myIntClass=new GenericClass();
var myStringClass=新的GenericClass();
myIntClass.MyProperty=1;
myStringClass.MyProperty=“测试”;
myIntClass.TestMethod();
myStringClass.TestMethod();
您还可以设置约束,以便泛型类必须实现一个特定的接口,即be-class和have-constructor。 公共接口可打印 { 作废打印(); }

public类GenericClassWithConstraint其中T:IPrintable
{
公共MyT属性{get;set;}
作废打印()
{
MyProperty.Print();
}
}

您还可以签出新关键字dynamic。它将允许您在运行时处理对象

您可以使用泛型,也可以使用
动态
,具体取决于您希望如何使用

要使用泛型方法,请将
项定义为:

class Item<T> {
    public T Variable { get; set; }
}
如果需要
变量
为字节的项目,请执行以下操作:

var intItem = new Item<int>()
// you can set the Variable property to an int now!
intItem.Variable = -1;
var byteItem = new Item<byte>()
// you can set the Variable property to a byte
byteItem.Variable = 10;
如果要在不创建新项的情况下将其类型更改为其他类型,则应使用动态变量:

class Item {
    public dynamic Variable {get; set;}
}
您现在可以执行以下操作:

var myItem = new Item();
myItem.Variable = "Hello";
myItem.Variable = 10;
这与将
变量
定义为
对象
基本相同,但它节省了在
对象
和所需类型之间进行转换的时间

关于检查值是否超出范围的问题,如果使用
dynamic
,可能会有点难以检查。但我做了一个小测试,发现当值溢出时,它只会环绕:

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

项目
类型有问题吗?我很难理解您的要求。请展示一些如何使用此变量的示例代码。您应该研究泛型(对我的问题进行一些澄清,因为有人选择将我的非答案转换为泛型…)-您在这里试图解决什么样的问题?你是说你需要改变一个变量的类型-你为什么要这样做?通过解决您的问题,这样做会给您带来什么?您需要更多关于“问题是,在分配值时,后面的检查没有超出范围?”的信息。。您的实际问题是集合和超出范围异常吗?或者类似的东西?解释它是如何工作的,以及它为什么回答OP的问题。它确实解决了“或者有其他方法解决这个问题吗?”的概念。。但这并没有真正解决“问题是,分配值时,检查的时间越晚,不超过范围?”的考虑。。这是OP需要进一步澄清的实际问题。。我怀疑
列表
将是一个范围。。但还不知道。谢谢,就是这个。它简单易用。问候语:“米莎”G.K.KoSky.如果你认为我的答案回答你的问题,请考虑接受它!
var myItem = new Item();
myItem.Variable = "Hello";
myItem.Variable = 10;
var item = new Item();
item.Variable = byte.MaxValue;
item.Variable++;
Console.WriteLine(item.Variable); // prints 0