资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

C#协变与抗变详解

-------------------------------------------------Animal.cs

成都创新互联是一家专业从事成都网站设计、网站制作、外贸营销网站建设的网络公司。作为专业网站设计公司,成都创新互联依托的技术实力、以及多年的网站运营经验,为您提供专业的成都网站建设、成都全网营销及网站设计开发服务!

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication2
{
    public class Animal
    {
    }
}

-------------------------------------------------Dog.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication2
{
    public class Dog:Animal
    {
    }
}

-------------------------------------------------IOut.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication2
{
    public interface IOut//协变
    {
        T Xb();//T 只能作为返回值
    }
}

-------------------------------------------------IIn.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication2
{
    public interface IIn//抗变
    {
        void Kb(T t);//T 只能作为参数
    }
}

-------------------------------------------------ListOutIn.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication2
{
    public class ListOutIn : IOut, IIn
    {
        public T Xb()
        {
            throw new NotImplementedException();
        }
        public void Kb(T t)
        {
            throw new NotImplementedException();
        }
    }
}

-------------------------------------------------主程序

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            //out --> 协变--> 输出--> 隐式转换
            //in  --> 抗变--> 输入--> 显示转换

            //协变
            IOut oa = new ListOutIn();
            IOut od = new ListOutIn();
            oa = od;//因为接口是协变的,隐式转换成功
            //抗变
            IIn ia = new ListOutIn();
            IIn id = new ListOutIn();
            id = ia;//因为接口是抗变的,显示转换成功
        }
    }
}

 


当前标题:C#协变与抗变详解
链接地址:http://cdkjz.cn/article/gsidpp.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220