C# where泛型约束
2015-01-18 09:03
99 查看
最近无意中看到了:http://msdn.microsoft.com/zh-cn/library/bb384067.aspx。但是,人笨啊,木有看懂到底是啥意思,木办法自己写一个试试吧,权当做个笔记
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/cry.gif)
例子如下:
接口:
接口实现:
创建一个带有泛型约束的类:
由于有where字句的泛型约束,所以,创建FruitMarket的对象时,T的类型只能是继承自IFruit接口的类。
运行结果:
![](https://img-blog.csdn.net/20150118090813959?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamlhbmt1bmtpbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
本文仅仅是一个用法案例,具体的详细内容,请参照:http://blog.csdn.net/jiankunking/article/details/42876587
测试代码如下:http://download.csdn.net/detail/xunzaosiyecao/8461671
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/cry.gif)
例子如下:
接口:
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 { get { return this.ToString(); ; } set { 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#调用COM组件
- C#中抽象方法与虚拟方法的区别
- c#中虚函数的相关使用方法
- C#中Equality和Identity浅析
- C#生成饼形图及添加文字说明实例代码
- C#判等对象是否相等的方法汇总
- C#简单的向量用法实例教程
- C#托管堆对象实例包含内容分析
- C#虚方法的声明和使用实例教程
- C#获取文件夹及文件的大小与占用空间的方法
- C#线程间不能调用剪切板的解决方法
- C#实现WinForm捕获最小化事件的方法
- C#画图之饼图折线图的实现方法
- C#中this指针的用法示例
- 浅析C# web访问mysql数据库-整理归纳总结
- C#中struct和class的区别详解
- some new eigrp feature
- C#实现Datatable排序的方法
- C#针对xml基本操作及保存配置文件应用实例
- C# IP地址与整数之间转换的具体方法