C# 转换操作符方法

转换操作符方法

CLR 规范要求转换操作符重载方法必须是 publicstatic 方法。

此外,C# 要求参数类型和返回类型二者必有其一与定义转换方法的类型相同。

/// <summary>
/// 由一个 Int32 隐式构造并返回一个 Rational
/// </summary>
/// <param name="num"></param>
public static implicit operator Rational(Int32 num)
{
return new Rational(num);
}

/// <summary>
/// 由一个 Rational 显示返回一个 Int32
/// </summary>
/// <param name="r"></param>
public static explicit operator Int32(Rational r)
{
return r.ToInt32();
}
C# 类型构造器

类型构造器 type constructor(静态构造器 static constructor)

类型构造器可应用于接口(虽然C#编译器不允许)、引用类型和值类型。
类型构造器的作用是设置类型的初始状态。
类型构造器总是私有的(C# 自动把它们标记为 private)。

class SomeRefType
{
    static int MaxCount;
    static SomeRefType()
    {
        MaxCount = 100;
    }
}
C# 操作符重载

重载 + 操作符

sealed class Complex
{
    public int Value { get; set; }

    public static Complex operator +(Complex c1, Complex c2)
    {
        return new Complex()
        {
            Value = c1.Value + c2.Value,
        };
    }
}
C# 关键字及其对组件版本控制的影响

类型

  • abstract

    表示不能构造该类型的实例

    abstract class AbstractClassA : Object
    {
        /// <summary>
        /// 虚方法
        /// </summary>
        public virtual void MethodA()
        {
            Console.WriteLine($"{MethodBase.GetCurrentMethod().DeclaringType.Name}.{MethodBase.GetCurrentMethod().Name}");
        }
    
        /// <summary>
        /// 抽象方法
        /// </summary>
        public abstract void MethodB();
    
        /// <summary>
        /// 实例方法
        /// </summary>
        public void MethodC()
        {
            Console.WriteLine($"{MethodBase.GetCurrentMethod().DeclaringType.Name}.{MethodBase.GetCurrentMethod().Name}");
        }
    }
    
  • virtual

    (不允许)

  • override

    (不允许)

  • sealed

    表示该类型不能用作基类型

    sealed class SealedClassA
    {
    }
    

    如果继承该类会报如下错误:

    无法从密封类型“SealedClassA”派生
    
  • new

    表示该成员与基类中相似的成员无任何关系(仅可修饰嵌套类型)

    class NestClass
    {
        new class SubNestClass
        {
        }
    }
    

    上述代码会有警告,不清楚何种情况下使用 new 修饰 class 才能没有警告。

    成员“NestClass.SubNestClass”不会隐藏可访问成员。不需要关键字 new。