zl程序教程

您现在的位置是:首页 >  后端

当前栏目

C# where泛型约束

c#泛型 约束 where
2023-09-14 09:03:18 时间
        最近无意中看到了:http://msdn.microsoft.com/zh-cn/library/bb384067.aspx。但是,人笨啊,木有看懂到底是啥意思,木办法自己写一个试试吧,权当做个笔记 例子如下: using System; using System.Collections.Generic; using System.Linq; using

        最近无意中看到了:http://msdn.microsoft.com/zh-cn/library/bb384067.aspx。但是,人笨啊,木有看懂到底是啥意思,木办法自己写一个试试吧,权当做个笔记哭

例子如下:

接口:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace WhereTest

 /// summary 

 /// 水果接口

 /// /summary 

 public interface IFruit

 //水果名称

 string FruitName

 get;

 set;

 string GetName();

 /*接口中只能包含方法、属性、索引器和事件的声明。

 * 不允许声明成员上的修饰符,即使是pubilc都不行,因为接口成员总是公有的,也不能声明为虚拟和静态的。

 * 如果需要修饰符,最好让实现类来声明。


接口实现:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace WhereTest

 /// summary 

 /// 梨子类

 /// /summary 

 public class Peach : IFruit

 //无参、公共 构造函数

 public Peach()

 private string fruitName;

 string IFruit.FruitName

 return this.ToString(); ;

 fruitName = value;

 string IFruit.GetName()

 return string.IsNullOrEmpty(fruitName) ? "木有找到名字" : fruitName;

创建一个带有泛型约束的类:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace WhereTest

 /// summary 

 /// 带有泛型约束的类

 /// /summary 

 /// typeparam name="T" /typeparam 

 public class FruitMarket T 

 where T : IFruit,

 new()//new()的意思是,这个T必须有public构造函数

 T item = new T(); 

 public void FruitSayHello()

 item.FruitName = "我是梨子";

 Console.WriteLine("你好:" + string.Format("Fruit:{0}", item.GetName()));

 Console.ReadKey();

 /*在定义泛型类时,可以对客户端代码能够在实例化类时用于类型参数的类型种类施加限制。

 * 如果客户端代码尝试使用某个约束所不允许的类型来实例化类,则会产生编译时错误。*/

由于有where字句的泛型约束,所以,创建FruitMarket的对象时,T的类型只能是继承自IFruit接口的类。

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace WhereTest

 class Program

 static void Main(string[] args)

 //实例化之后 只能在static方法中调用相应的方法,否则 根本找不着peach变量

 FruitMarket Peach peach = new FruitMarket Peach 

 peach.FruitSayHello();

}

运行结果:


本文仅仅是一个用法案例,具体的详细内容,请参照:http://blog.csdn.net/jiankunking/article/details/42876587

测试代码如下:http://download.csdn.net/detail/xunzaosiyecao/8461671


C#(五十一)之泛型的约束 基类约束有两个重要的目的。 1:它允许在泛型类中使用有约束指定的基类成员。 2:确保只能使用支持指定基类或派生类的类型实例。
C#语法——泛型的多种应用 本篇文章主要介绍泛型的应用。 泛型是.NET Framework 2.0 版类库就已经提供的语法,主要用于提高代码的可重用性、类型安全性和效率。 泛型的定义下面定义了一个普通类和一个泛型类,我们可以明确看到泛型类和普通类最大的区别就是多了一个。