Wii*_*axx 5 c# types overloading .net-4.0
我创建了一个只能处理原始(或ICloneable)类型的类
我想知道是否可以这样说:
public myobject(primitiv original){...}
Run Code Online (Sandbox Code Playgroud)
或者我真的需要为每个基本类型创建一个构造函数,如:
public myobject(int original){...}
public myobject(bool original){...}
...
Run Code Online (Sandbox Code Playgroud)
我想要实现的是创建一个具有3个公共属性Value,Original和IsDirty的对象.
价值将是一个深刻的原始克隆,所以原始需要是原始的或ICloneable
如果你想这样做迫使谁使用你的API来使用这些类型(如果他们使用错误的类型,通过编译时错误),我担心它无法完成.
但是,您可以object在构造函数中接收一个,评估其类型,并抛出一个ArgumentException参数既不是"原始"类型也不是实现的情况ICloneable.
编辑:这可能很有用.您可以使用以下代码确定变量是否属于基本类型:
Type t = foo.GetType();
t.IsPrimitive; // so you don't have to do an evaluation for each primitive type.
Run Code Online (Sandbox Code Playgroud)
C#中的原始类型被定义为结构(通常ValueType在.NET CLR中实现).我相信你有两个选择:
where T : struct(使用T类型参数)使构造函数通用.这将捕获所有结构,而不仅仅是原始类型,但我认为这是您无需手动检查和编译时检查的最佳选择.当然,您可以将此约束与其他约束混合使用.您可以将上面的两个选项结合起来,让一些检查在编译时完成,其中一些在运行时完成.
| 归档时间: |
|
| 查看次数: |
218 次 |
| 最近记录: |