最近无意中看到了:http://www.php.cn/。但是,人笨啊,木有看懂到底是啥意思,木办法自己写一个试试吧,权当做个笔记
例子如下:
接口:
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace WhereTest{ /// /// 水果接口 /// public interface IFruit { //水果名称 string FruitName { get; set; } string GetName(); /*接口中只能包含方法、属性、索引器和事件的声明。 * 不允许声明成员上的修饰符,即使是pubilc都不行,因为接口成员总是公有的,也不能声明为虚拟和静态的。 * 如果需要修饰符,最好让实现类来声明。 */ }}
接口实现:
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace WhereTest{ /// /// 梨子类 /// 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{ /// /// 带有泛型约束的类 /// /// public class FruitMarket 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 = new FruitMarket(); peach.FruitSayHello(); } }}
运行结果:

以上就是C# where泛型约束的内容,更多相关内容请关注PHP中文网(www.php.cn)!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1432314.html
微信扫一扫
支付宝扫一扫