C# 在 class 中重新定义一个变量

C# redefine a variable in class

我确定 C# 中的问题 "types"。

假设我有一个 class,工作名称是 "item"。 这个class有一个字段比如"variable"。 该字段应与我程序中元素的字段相匹配,例如布尔值 int16、int32、int64、double、uint、uint16。

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

我考虑将此变量定义为 var 或 object,然后将其投影到给定类型。

问题是后面赋值的时候检查没有超出范围?

您可以使用泛型。当您创建具有新类型的对象时,它会自动在代码后面创建一个 class 定义。

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();

您还可以设置约束,使泛型 class 必须实现特定接口,即 class,具有构造函数。 public 接口IPrintable { 无效打印(); }

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 定义为 object 基本相同,但它可以节省您在 object 和所需类型之间转换的时间。

关于您担心检查值是否超出范围,如果您使用 dynamic 可能会有点难以检查。但是我做了这个小测试,发现当值溢出时,它会绕回:

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