我需要创建两个额外的关键字input,output所以我可以在我的c#代码中减少这些:
input int a;
input int b;
output int c;
swap (input int lhs, output int rhs) { ... }
swap(a,c) // should be compiled;
swap(c,a) // should return compile error
swap(a,b) // should return compile error
Run Code Online (Sandbox Code Playgroud)
我还需要编译器接受a = b但拒绝b = c或c = a.可能吗?那么如果不可能解决方案是什么?我已经使用Output<T>和Input<T>作为所有类型的通用包装器,但每当我想访问这些通用包装器中的值时,我讨厌使用值getter和setter!
你可以使用这样的东西:
public sealed class Input<T>
{
public T value { get; set; }
public Input(T v)
{
value = v;
}
public static implicit operator T(Input<T> d)
{
return d.value;
}
public static implicit operator Input<T>(T d)
{
return new Input<T>(d);
}
}
public sealed class Output<T>
{
public T value { get; set; }
public Output(T v)
{
value = v;
}
public static implicit operator T(Output<T> d)
{
return d.value;
}
public static implicit operator Output<T>(T d)
{
return new Output<T>(d);
}
}
Run Code Online (Sandbox Code Playgroud)
然后swap方法如下:
static void swap<T>(Input<T> input, Output<T> output)
{
output.value = input.value;
}
Run Code Online (Sandbox Code Playgroud)
用法:
Input<int> myInput = 1;
Input<int> myInput2 = 1;
Output<int> myOutput = 0;
swap(myInput, myOutput); //Compiles
swap(myInput, myInput2); //Error
swap(myOutput, myInput); //Error
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
554 次 |
| 最近记录: |