下面这段代码的功能是给画面上的某个控件显示指定的内容
this.SetInfoString((int)HeaderInfoPosition.Gakunen, EnumGakunen.GetName(
this.DTOGakureibo.Gakunen.ToString()), true, MkLabelForeColorStyle.Nomal);(int)HeaderInfoPosition.Gakunen :控件
EnumGakunen.GetName(this.DTOGakureibo.Gakunen.ToString()):显示内容,当然如果我写固定值“程序员”,那么就会直接显示程序员。
其余参数不考虑。以下,是第二个参数EnumGakunen的代码
[EnumDefinition("学年")]
    public class EnumGakunen : EnumItemBase<string, EnumGakunen>, IEnumItem
    {
       protected EnumGakunen(string val, string name) : base(val, name) { }
       public static implicit operator string(EnumGakunen value) { return value.value_; }
       public static explicit operator EnumGakunen(string value) { return Convert(value); }
       public static implicit operator int(EnumGakunen value) { return Int32.Parse(value.value_); }
       public static explicit operator EnumGakunen(int value) { return Convert(value.ToString()); }
        #endregion        #region 
        public struct cst
        {
            /// <summary>小学1年</summary>
            public const string Sho1 = "1";
            /// <summary>小学2年</summary>
            public const string Sho2 = "2";
            /// <summary>小学3年</summary>
            public const string Sho3 = "3";
       
        }
        #endregion        /// <summary>小学1年(Enum值)</summary>
        public readonly static EnumGakunen Sho1 = new EnumGakunen(cst.Sho1, "小学1年");
        /// <summary>小学2年(Enum值)</summary>
        public readonly static EnumGakunen Sho2 = new EnumGakunen(cst.Sho2, "小学2年");
        /// <summary>小学3年(Enum值)</summary>
        public readonly static EnumGakunen Sho3 = new EnumGakunen(cst.Sho3, "小学3年");
    }
    #endregion EnumGakunen我的问题是:
1、 不清楚EnumGakunen为什么要这么写,这部分内容属于C#哪一个范畴。
2、 public static implicit operator string(EnumGakunen value) { return value.value_; }       public static explicit operator EnumGakunen(string value) { return Convert(value); }
public static implicit operator int(EnumGakunen value) { return Int32.Parse(value.value_); }
public static explicit operator EnumGakunen(int value) { return Convert(value.ToString()); }
上述两行代码怎么解释,应该看c#哪方面的知识来了解。
3、 EnumGakunen.GetName()是怎么取得值的?
4、 各位实现类似功能的时候都是如何写的?

解决方案 »

  1.   

    operator
    operator 关键字用于在类或结构声明中声明运算符implicit
    implicit 关键字用于声明隐式的用户定义类型转换运算符。
    注意:
    隐式转换可以通过消除不必要的类型转换来提高源代码的可读性。但是,因为可以在程序员未指定的情况下发生隐式转换,因此必须注意防止令人不愉快的后果。一般情况下,隐式转换运算符应当从不引发异常并且从不丢失信息,以便可以在程序员不知晓的情况下安全使用它们。如果转换运算符不能满足那些条件,则应将其标记为 explicit。 explicit
    explicit 关键字用于声明必须使用强制转换来调用的用户定义的类型转换运算符。注意:转换运算符将源类型转换为目标类型。源类型提供转换运算符。与隐式转换不同,必须通过强制转换的方式来调用显式转换运算符。如果转换操作可能导致异常或丢失信息,则应将其标记为 explicit。这可以防止编译器无提示地调用可能产生无法预见后果的转换操作。 
      

  2.   

    我的问题是: 
    1、 不清楚EnumGakunen为什么要这么写,这部分内容属于C#哪一个范畴。 //Attribute(特性)2、 public static implicit operator string(EnumGakunen value) { return value.value_; }      public static explicit operator EnumGakunen(string value) { return Convert(value); } 
    public static implicit operator int(EnumGakunen value) { return Int32.Parse(value.value_); } 
    public static explicit operator EnumGakunen(int value) { return Convert(value.ToString()); } 
    上述两行代码怎么解释,应该看c#哪方面的知识来了解。 看楼上的解释
    3、 EnumGakunen.GetName()是怎么取得值的? 
    看看你的源程序,应该就知道怎么获得的了4、 各位实现类似功能的时候都是如何写的? 
      

  3.   

    我也来说谈一下我的认识,各位高手可见笑啊。
    2、 public static implicit operator string(EnumGakunen value) { return value.value_; }      public static explicit operator EnumGakunen(string value) { return Convert(value); } 
    public static implicit operator int(EnumGakunen value) { return Int32.Parse(value.value_); } 
    public static explicit operator EnumGakunen(int value) { return Convert(value.ToString()); } 
    此处涉及到的知识点有继承,泛型,可能还有别的,就只认识这两个了。
    3、 EnumGakunen.GetName()是怎么取得值的?
    他的值就该就是取this.DTOGakureibo.Gakunen的值了。
      

  4.   

    implicit/explicit运算符是用来声明隐式/显式类型转换运算符的.
    比如
    class a{
    public static implicit operator int(a value){....}
    public static implicit operator double(a value){....}
    }
    有这条函数后你就可以这样调用:
    a obj = new a();
    int b = a;//隐式转换函数被调用.
    double c = (double)a;//显式转换函数被调用.至于为甚么EnumGakuen这样写...显然作者是希望把它当作一个枚举类来用,
    但又限于enum的值只能为int所以只好把这些实例声明成常量,然后用EnumGakuen
    这个类来做归类,这样在VS IDE里也能达到enum的效果,可以看做enum的一种变体,
    算是平时常用的手段吧.类似的设计在.net类库里的OpCodes类上也能看到:)
      

  5.   

    EnumGakuen被当作一个枚举类来用,这句话倒是懂了,不过它里面的代码实在是没理解,
    谁能解释的大白话,通俗一些。
      

  6.   

    没有人再帮着回答一下吗?关于EnumGakuen这个类