Home  >  Article  >  Backend Development  >  C# where generic constraints

C# where generic constraints

黄舟
黄舟Original
2017-02-17 11:25:281524browse

Recently I accidentally saw: http://www.php.cn/. However, people are stupid and don’t understand what it means. There is no way to write one yourself and try it. Just treat it as a noteC# where generic constraints

The example is as follows:

Interface:


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都不行,因为接口成员总是公有的,也不能声明为虚拟和静态的。
         * 如果需要修饰符,最好让实现类来声明。
        */
    }
}



##Interface implementation:


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;
        }
    }
}

Create a class with generic constraints:



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();
        }
        /*在定义泛型类时,可以对客户端代码能够在实例化类时用于类型参数的类型种类施加限制。
         * 如果客户端代码尝试使用某个约束所不允许的类型来实例化类,则会产生编译时错误。*/
    }
}

Due to the generic constraints of the where clause, when creating a FruitMarket object, the type of T can only be a class inherited from the IFruit interface.


##

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();
        }
    }
}

## Running results:

The above is the content of C# where generic constraints. For more related content, please pay attention to the PHP Chinese website (www.php.cn)!


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn