泛型的类型约束
//泛型类型约束//
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;
//A<int> ah = new A<int>();
//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 A<T>where 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:<base class name> 限定当前参数类型 必须是当前类 或者当前类为基类的类
//父类名
// 5. where T:<interface name>限定当前参数类型必须实现指定接口
class Program
{
static void Main( string [] args)
{
//D<Base> d = new D<Base>();
//Base ba = new Base();
//Console.WriteLine("泛型类D的 funcd的方法 在此被调用");
//d.funcd(ba);//此处调用funcd的方法
//C<Cb> c = new C<Cb>();
//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;
}
}
}