我正在C#中尝试recreate this。
我得到的问题是如果我使用构造函数我必须使用我不想要的新MyInt(详细)。解决它的方法是使用隐式/显式运算符。但是它们必须是公开的...我如何在C#中实现这一功能?
简短的问题是我想将byte / short传递给函数但不是int。传递int应该给我一个编译错误。我知道我可以使用公共隐式int运算符轻松获得运行时。下面的代码显示int自动转换为char
Running sample显示为真
using System;
class Program
{
public static void Write(MyInt v)
{
Console.WriteLine("{0}", v.v is byte);
}
static void Main(string[] args)
{
Write(2);
}
}
public struct MyInt
{
public object v;
public MyInt(byte vv) { v = vv; }
public MyInt(short vv) { v = vv; }
public MyInt(byte[] vv) { v = vv; }
public static implicit operator MyInt(byte vv) { return new MyInt { v = vv }; }
//public static extern implicit operator MyInt(int vv);
}
Heres more code which is useless。它实现了MyInt2 / MyInt,这在C ++解决方案中是不需要的
答案 0 :(得分:3)
只是声明你的功能很短。字节会被隐式转换为short,但是没有从int到short的隐式转换,所以int只是不会传递
public class Class1
{
public static void Aaa(short a)
{
}
public void Bbb()
{
int i = 5;
byte b = 1;
short c = 1;
Class1.Aaa(i); // Gives error
Class1.Aaa(b); // Ok
Class1.Aaa(c); // ok
}
}