泛型的类型约束
//泛型类型约束// using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 泛型的类型约束 { class Program { static void Main( string [] args) { //int a = 3, b = 20; //Aah = new A(); //Console.WriteLine(ah.P(a, b)); //int a = 10; C c = new C (); B < C > bh = new B < C >(); bh.P(c); //Console.WriteLine(b); } } public interface IM { int Change(); string Compare(); } //public class Awhere T :IComparable //{ // public T P(T a, T b) // { // if (a.CompareTo(b)>0) // { // return a; // } // else // { // return b; // } // } //} public class C : IM { public int Change() { Console .WriteLine( "这是接口IM的Change方法" ); return 0; } public string Compare() { Console .WriteLine( "这是接口IM的Compare方法" ); return null ; } } public class B < T > where T : IM { public T P( T a) { if (a.Change() > 0) { return a; } return a; } } } //泛型五大类型约束 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 泛型的五大约束 { 泛型类的五大约束 // 1. where T:struct 限定当前参数类型必须是值类型 // 2. where T:class 限定当前类型参数类型必须是引用类型 // 3. where T:new() 限定当前参数类型必须有一个无参构造器 // 4. where T:限定当前参数类型 必须是当前类 或者当前类为基类的类 //父类名 // 5. where T:限定当前参数类型必须实现指定接口 class Program { static void Main( string [] args) { //Dd = new D(); //Base ba = new Base(); //Console.WriteLine("泛型类D的 funcd的方法 在此被调用"); //d.funcd(ba);//此处调用funcd的方法 //Cc = new C(); //c.f(); F f = new F (); E < F > e = new E < F >(); e.funce(f); } } public class Base { public void fb() { Console .WriteLine( "这是基类Base的方法fb" ); } } public class A < T > where T : struct { public void funca( T a) { } } public class B { } public class C < T > where T : new () { public void f() { Console .WriteLine( "这里是无参构造函数的方法" ); } } public class Cb { public Cb() { } } public class D < T > where T : Base { public void funcd( T a) { a.fb(); } } public interface INter { int funinter(); } public class F : INter { public int funinter() { Console .WriteLine( "这里是实现了继承接口内的方法" ); return 0; } } public class E < T > where T : INter // 第五种类型 { public T funce( T a) { a.funinter(); Console .WriteLine( "这里是E内的方法的实现" ); return a; } } }