当前位置:首页 > Windows程序 > 正文

转:C# 泛型编程之泛型类、泛型方法、泛型约束

2021-05-26 Windows程序

    public class MyClass<T> where T:IComparable<T>
    {
        
        public void MyMethod<X>(X x,T t) where X:IComparable<X> 
        {
            //
        }
    }

    泛型参数虚方法的重写:子类方法必须重新定义该方法特定的泛型参数,代码如下

    public class MyBaseClass
    {
        public virtual void SomeMethod<T>(T t)
        {
            //
        }
    }
    public class MyClass :MyBaseClass
    {
        public override void SomeMethod<X>(X x)
        {
            
        }
    }

 

同时子类中的泛型方法不能重复基类泛型方法的约束,这一点和泛型类中的虚方法重写是有区别的,代码如下

    public class MyBaseClass
    {
        public virtual void SomeMethod<T>(T t) where T:new()
        {
            //
        }
    }
    public class MyClass :MyBaseClass
    {
        //正确写法
        public override void SomeMethod<X>(X x)
        {
            
        }

        ////错误 重写和显式接口实现方法的约束是从基方法继承的,因此不能直接指定这些约束
        //public override void SomeMethod<X>(X x) where X:new()
        //{

        //}
    }

    子类方法调用虚拟方法的基类实现:它必须指定要代替泛型基础方法类型所使用的类型实参。你可以自己显式的指定它,也可以依靠类型推理(如果可能的话)代码如下:

    public class MyBaseClass
    {
        public virtual void SomeMethod<T>(T t) where T:new()
        {
            //
        }
    }
    public class MyClass :MyBaseClass
    {
        //正确写法
        public override void SomeMethod<X>(X x)
        {
            base.SomeMethod<X>(x);
            base.SomeMethod(x);
        }
    }

泛型委托

    在某个类中定义的委托可以使用该类的泛型参数,代码如下

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/71259.html