java - 将子对象分配给基础是可能的,但如果对集合执行相同的操作,则不可能

标签 java c# .net oop inheritance

可以将子对象分配给基础。

base1 b1 = new child1();

但是如果我们对集合做同样的事情是不可能的,为什么?

List<base1> libase = new List<child1>();

任何包含此解释的引用资料都非常有帮助,请分享

        public class base1
        {

        }
        public class child1 : base1
        {

        }
        static void Main(string[] args)
        {
            base1 b1 = new child1();
            List<base1> libase = new List<child1>();
            Console.Read();   
        }

最佳答案

在 C# 中你可以做到这样的技巧:

List<base1> libase = new List<base1>(new List<child1>());

此外,您还可以使用 IEnumerable 接口(interface):

IEnumerable<base1> libase = new List<child1>();

因为它声明为:

  public interface IEnumerable<out T> : IEnumerable
  {
    IEnumerator<T> GetEnumerator();
  }

out T这是最重要的。

当列表只是:

public class List<T>
{}

关于您的问题,请在此处阅读更多内容 Covariance and Contravariance in Generics

关于java - 将子对象分配给基础是可能的,但如果对集合执行相同的操作,则不可能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44178934/

相关文章:

java - jsp输出错误

java - 关于java中可克隆接口(interface)和object.clone()的混淆

c# - 通过尝试从 soap 服务检索数据而未授权 HTTP 请求

c# - 工作单元设计模式中的事务

java - 我应该在远程工作站的哪个位置放置 CSV 配置文件以进行分布式 JMeter 测试?

java - Android File.setReadyOnly() 未按预期工作

c# - 为什么在 WCF 应用程序的 Web.config 文件中添加 httpRuntime targetFramework 可以解决与 TLS 相关的连接问题?

.net - .net 嵌入式数据库

c# - 为什么在这种情况下没有死锁?

c# - 如何锁定和解锁 SQL SERVER 表?