如果是Int,C#编译时错误?

时间:2012-07-11 11:05:49

标签: c# compiler-construction msbuild

我正在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 ++解决方案中是不需要的

1 个答案:

答案 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
  }
}