최근 우연히 http://www.php.cn/을 보았습니다. 하지만 사람들은 멍청해서 그 의미를 이해하지 못합니다. 직접 작성해서 시도해 볼 방법은 없습니다.
예는 다음과 같습니다. 다음:
인터페이스:
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(); } } }
실행 결과:
위 내용은 Generic 제약이 있는 C#의 내용입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!