当前位置: 4166金沙 > 首页 > 正文

泛型约束,录像轨道车金沙4166

时间:2020-01-04 01:40来源:首页
配备参数 特色: DVHZ 移轻轨 录像轨道车 软硬轨道 脚轮三脚架通用指导方便【大Y型B型】 翻开完整参数 1. 简介: 2.0 版 C# 语言和公共语言运营时 (CLENCOREState of Qatar 中追加了泛型。泛型

配备参数

  • 特色:DVHZ 移轻轨 录像轨道车 软硬轨道 脚轮三脚架通用指导方便 【大Y型B型】

翻开完整参数>>

1. 简介:

2.0 版 C# 语言和公共语言运营时 (CLENCOREState of Qatar 中追加了泛型。 泛型将项目参数的概念引入 .NET Framework,类型参数使得设计如下类和方法成为只怕:这么些类和办法将一个或三个种类的钦赐推迟到客商端代码评释并实例化该类或措施的时候。

泛型:即经过参数化类型来得以达成在同风华正茂份代码上操作各样数据类型。

2. 语法:

    class ClassName<Type>
    {
         public void Add(Type input)
        {
        }
    }

    class Program
    {
        public void test0()
        {
            ClassName<int> testClass = new ClassName<int>();
            testClass.Add(5);
            print<int>(5, 6);
            print(5, 6); // <>可以省略
        }

        public void print<T1>(T1 x, T1 y)
        {
            Console.WriteLine(x.ToString(),y.ToString());
        }

    }

应用泛型也能够完结代码重用的目标。

3. 约束:

1.泛型类

1> 限定简要介绍

在概念泛型类时,能够对顾客端代码能够在实例化类时用于项目参数的类型体系施加节制。 假若顾客端代码尝试利用有些约束所不一致敬的项目来实例化类,则会生出编写翻译时不当。 那个约束称为约束。 约束是应用 where上下文关键字钦点的。 下表列出了各类档案的次序的束缚:

约束 说明
T : struct 类型参数必须是值类型。
T : class 类型参数必须是引用类型;这一点也适用于任何类、接口、委托或数组类型。
T:new() 类型参数必须具有无参数的public构造函数。 当与其他约束一起使用时,new() 约束必须最后指定。
T:<基类名> 类型参数必须是指定的基类或派生自指定的基类。
T:<接口名称> 类型参数必须是指定的接口或实现指定的接口。 可以指定多个接口约束。 约束接口也可以是泛型的。
T:U 为 T 提供的类型参数必须是为 U 提供的参数或派生自为 U 提供的参数。

泛型类的定义与日常类的概念差相当的少如出意气风发辙,只是它把风度翩翩部分参数用泛型的系列参数来代表。

2> 约束简要介绍案例
    class TestClass<TestType> where TestType : struct
    {

    }

    static void Main(string[] args)
     {
            TestClass<int> t1 = new TestClass<int>();

            //TestClass<string> t2 = new TestClass<string>(); 错误,只能传递值类型
    }

格式:

3> 使用泛型约束的原由(优势卡塔尔(قطر‎

如若要检查泛型列表中的某些项以明确它是或不是有效,或许将它与此外有个别项进行比较,则编写翻译器必得在任其自然水平上保证它必要调用的运算符或措施将蒙受客商端代码只怕钦点的别的类型参数的协理。 这种保障是因此对泛型类定义应用三个或多少个节制拿到的。 比如,基类节制告诉编写翻译器:仅此类型的对象或现在类型派生的指标才可用作类型参数。 后生可畏旦编写翻译器有了那个保证,它就能够允许在泛型类中调用该类型的点子。

能够对相符连串参数应用八个节制,並且封锁自个儿能够是泛型类型,如下所示:

        class EmployeeList<T> where T : Employee, IEmployee, System.IComparable<T>, new()
        {
            // ...
        }

修饰符 class 类名<类型参数列表>

4> 泛型节制的注意点:

经过自律类型参数,能够扩充约束类型及其继承档案的次序布局中的全数品种所支撑的允许操作和议程调用的多少。 由此,在策画泛型类或措施时,要是要对泛型成员实施除轻易赋值之外的任何操作或用 System.Object不帮助的别的方法,您将索要对该项目参数应用限定。在利用 where T : class 限制时,幸免对品种参数使用 == 和 != 运算符,因为这几个运算符仅测量检验援引同风姿洒脱性而不测量检验值相等性。

{

5> 约束多个参数

可以对多少个参数应用约束,并对多个参数应用五个约束,如下边包车型大巴亲自过问所示

         class Base { }
         class Test<T, U>
            where U : struct
            where T : Base, new()
            { }

类体

6> 未绑定的品类参数

尚无限定的项目参数(如公共类 SampleClass<T>{}中的 T)称为未绑定的花色参数。 未绑定的花色参数具备以下法则:

  • 不能够应用 !=和 == 运算符,因为不恐怕作保具体项目参数能支撑那一个运算符。

  • 能够在它们与 System.Object之间来回转变,或将它们显式调换为别的接口类型。

  • 可以将它们与 [null] 进行比较。 将未绑定的参数与 null进行对比时,如果类型参数为值类型,则该比较将始终重回 false。

}

7> 作为约束的门类参数

将泛型类型参数作为限定使用,在颇有温馨类型参数的成员函数必需将该参数限制为含有类型的类别参数时至极有用,如下示例所示:

        class List<T>
        {
            void Add<U>(List<U> items) where U : T {/*...*/}
        }

在上面的示范中,T在 Add方法的内外文中是二个项目节制,而在 List 类的上下文中是三个未绑定的连串参数。

连串参数还可在泛型类定义中作为节制。 请注意,必需在尖括号中宣示此类型参数与其余此外品种的参数:

SampleClass<T, U, V> where T : V { }

 

8> 为泛型方法加多节制
        void SwapIfGreater<T>(ref T lhs, ref T rhs) where T : System.IComparable<T>
        {
            T temp;
            if (lhs.CompareTo(rhs) > 0)
            {
                temp = lhs;
                lhs = rhs;
                rhs = temp;
            }
        }

泛型方法能够选拔过多门类参数举行重载。 比方,下列格局能够全方位坐落同二个类中:

        void DoWork() { }
        void DoWork<T>() { }
        void DoWork<T, U>() { }

2.泛型方法

4. 泛型接口:

语法:

     interface ITest1<K> 
    {

    }

一个接口可定义多少个门类参数,如下所示:

     interface ITest1<K, V> 
    {

    }

金沙4166,适用于类的后续法规平等适用于接口:

     interface ITest1<S> 
    {

    }

    interface ITest2<K> : ITest1<K>
    {

    }

泛型接口的约束:

    interface ITest1<S> where S : class
    {

    }

泛型接口的羁绊继承

     interface ITest1<S> where S : class
    {

    }

    interface ITest2<K> : ITest1<K> where K : class
    {

    }

泛型方法与不足为奇的点子分别在于运用途目参数注明方法,泛型方法也得以被重载和重写。

例如:

public void GetMax<T>(T t,int a)

{

方法体

}

参数的连串能够是T或此外系统的数据类型。

3.约束

自律是指对泛型类型参数施加节制,用于节制能够传递到该类型参数的花色种类。

a.基类限制

指令编写翻译器泛型类型参数必需派生自特定基类。

格式:修饰符 class 类名<类型参数列表> where 类型参数:基类名

b.接口限制

指令编写翻译器泛型类型参数必得派生自特定接口。

格式:修饰符 class 类名<类型参数列表> where 类型参数:接口名

c.暗中同意布局函数约束

指令编写翻译器泛型类型参数公开了私下认可的公家布局函数(不带任何参数的公物布局函数State of Qatar。即无参结构函数是public。

修饰符 class 类名<类型参数列表> where 类型参数 : new(卡塔尔(قطر‎

d:援引/值类型约束

指令翻译器泛型类型参数必需为引用类型或值类型。

格式:修饰符 class 类名<类型参数列表> where 类型参数:struct(或class卡塔尔国

 

 

个中ab都以封锁了父类或父接口,传递其子类或子接口也是能满意的。

编辑:首页 本文来源:泛型约束,录像轨道车金沙4166

关键词: