是否可能重载/重写类GenericType [关闭]

问题描述 投票:0回答:2

我有一个抽象的class Map<T> : ITexturable,但是我需要将Map限制为bool,byte和float,有什么方法可以确保这一点?

我以为我会读一些有关将此作为解决方案的内容

Map<float> : Map<float>作为重载类本身的一种方法,但是我得到的只是一个错误。

Map<T> : ITexturable的目的是生成过程图

地图将生成黑白形状的地图。Map将生成高度图,温度图,湿度图和压力图。地图将生成地形/生物群落地图。

计划是创建ShapeMap : Map<bool>HeightMap : Map<float>TerrainMap : Map<byte>等...但是我不希望我的地图做更多的事情,因此我需要限制输入的类型或使地图无法访问。

我没有与此相关的代码,因为我不知道从哪里开始编写此代码。

c#
2个回答
0
投票
但是您要求的这种组合是不可能的。有了有关boolbytefloat选择过程的更多信息,我可以提出一个更清晰的解决方案。通常只能限制接口或值类型等。最好的选择是,没有编程自己的(运行时)逻辑,这些约束是:structunmanagednotnullIComparableIEquatable之类的接口。

如果需要更多控制,可以检查构造函数中的类型。但不能在编译时阻止。


-1
投票
通用类型约束。

要限制boolbytefloat类型,最接近的是where T: unmanagedwhere T: struct子句。

但是可以通过评估值类型的实现方式来获得更好的结果(请参阅ValueType Class)。例如,此实现有助于限制为数值:

class Map<T> where T : struct, IComparable, IFormattable, IConvertible, IComparable<T>, IEquatable<T> { }

要了解更多,您可以查看本文:where (generic type constraint) (C# Reference)

© www.soinside.com 2019 - 2024. All rights reserved.