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

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

2021-03-26 Windows程序

    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);
        }
    }

泛型委托

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

    public class MyClass<T>
    {
        public delegate void GenericDelegate(T t);
        public void SomeMethod(T t)
        {
 
        }
    }
    public GenericMethodDemo()
    {
        MyClass<int> obj = new MyClass<int>();
        MyClass<int>.GenericDelegate del;
        del = new MyClass<int>.GenericDelegate(obj.SomeMethod);
        del(3);
    }

    委托推理:C#2.0使你可以将方法引用的直接分配转变为委托变量。将上面的代码改造如下

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