4
我应该避免使用泛型进行类型检查吗?不使用传统类型检查比较(myvar is int
),而是使用类型的typecode。通用类型码型检查?
使用泛型,通过类型检查,您可以创建一个没有支持常规重载方法任务的参数的单个方法。这是无参数方法的问题,它们不能被重载。
// "Buffer" is the byte[] while "Peek" is the read/write position. Then Align" is the alignment size in bytes of the buffer.
public type Read<type>() {
switch(Type.GetTypeCode(typeof(type))) {
case System.TypeCode.Boolean:
bool bool_val = (Buff[ Peek ] > 0);
Peek = (++Peek + (Align - 1)) & ~(Align - 1);
return (type)(object)bool_val;
case System.TypeCode.Byte:
byte byte_val = Buff[ Peek ];
Peek = (++Peek + (Align - 1)) & ~(Align - 1);
return (type)(object)byte_val;
case TypeCode.Ushort:
ushort ushort_val = (ushort)(Buff[ Peek ] | (Buff[ Peek + 1 ] << 8));
Peek += 2;
Peek = (Peek + (Align - 1)) & ~(Align - 1);
return (type)(object)ushort_val;
break;
...
}
}
这似乎是实现无参数方法重载形式的唯一方法。这被认为是不好的做法?
无论是好还是坏的做法通常都是非常有关联的。你能否提供一些你想要达到的细节? –
好点。我正在为网络系统编写一个缓冲区类。我需要几种类型的读/写方法。然而这对于读取方法来说并不容易,因为它们不能被重载。这迫使我要么使用泛型类型检查,要么使用多个个性化方法 - 从设计的角度来看,这也很糟糕。但是,您可以将此应用于大多数情况下,您只需要一种多功能类型的需要通用控制的方法。 – Kayle
你能给出'Boolean'和'Byte'各自情况的例子吗?就目前来看,我甚至没有看到需要使这个方法成为通用的(而不是将'Type'作为常规参数传递)。如果这个方法并不是真的需要通用 - 而是仅仅被用作硬编码专用案例的调用点,那么不,这不是坏习惯,要做你正在做的事情(因为没有其他方法实现它)。但是,正如我所说的,方法体中的更多细节可以让您更容易地看到您的想法。 –