-1

我确定 C# 中的问题“类型”。

假设我有一个工作名称为“item”的类。此类具有诸如“变量”之类的字段。该字段应与我程序中某个元素的字段匹配,例如 Boolean int16、int32、int64、double、uint、uint16。

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

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

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

4

2 回答 2

0

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

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。它将允许您在运行时处理对象

于 2016-11-27T19:13:08.407 回答
0

您可以使用泛型,也可以dynamic使用Item.

要使用泛型方法,请定义Item如下:

class Item<T> {
    public T Variable { get; set; }
}

当您想要一个Variableint 的项目时,请执行以下操作:

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
于 2016-11-27T19:48:17.337 回答