是否有可能在c#程序中添加额外的自定义关键字,从而使两个int变量成为不同的类型?
本文关键字:两个 int 变量 类型 程序 有可能 添加 关键字 自定义 是否 | 更新日期: 2023-09-27 18:03:16
我需要创建两个额外的关键字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
我还需要编译器接受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);
}
}
那么swap方法如下:
static void swap<T>(Input<T> input, Output<T> output)
{
output.value = input.value;
}
和用法:
Input<int> myInput = 1;
Input<int> myInput2 = 1;
Output<int> myOutput = 0;
swap(myInput, myOutput); //Compiles
swap(myInput, myInput2); //Error
swap(myOutput, myInput); //Error
我不知道你为什么需要这个,但是这个技巧只是出现在我的脑海里…可以使用基本类型作为包装器
double a = 0.0;
int b = 1;
float c = 3;
//this will compile
a = b;
//these will give compile error
b = c;
c = a;