.net 下面的代码给出了错误:错误CS1503:论据一:无法从“Child1”转换为“Test< bool,object>”

cngwdvgl  于 2023-10-21  发布在  .NET
关注(0)|答案(2)|浏览(160)

吹扫代码未运行,出现错误:“错误CS1503:论据一:无法从'Child1'转换为'Test<bool,object 1.0'“,我正在创建抽象类,它将Same抽象类作为构造函数中的参数。在创建它们的子类并将另一个子类作为参数传递给构造函数后,会产生上述编译错误。尝试ChatGPT它说逻辑代码是正确的,但为什么Visual Studio代码给出编译时错误。
https://learn.microsoft.com/en-us/answers/questions/1379331/compilation-error-cs8625-c

abstract class Test<A, B>
{
    private Test<B, object> t1;

    public Test(Test<B, object> t)
    {
        t1 = t;
    }
}

class Child1 : Test<int, string>
{
    public Child1(Test<string, object> t) : base(t)
    {
    }
}

class Child2 : Test<string, bool>
{
    public Child2(Test<bool, object> t) : base(t)
    {
    }
}

class Main
{
    public void Init()
    {
        Child2 c2 = new Child2(null);
        Child1 c1 = new Child1(c2);
    }
}
tp5buhyn

tp5buhyn1#

我在我的本地复制代码如下。

这里是工作样本,它可以帮助您修复它。

namespace CS1503
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello, World!");
            Child2 c2 = new Child2(null); 
            Child1 c1 = new Child1(c2);
        }
    }
    interface ITest<out A, out B>
    {
        // Covariant interface with no members that use A or B in input positions.
    }

    abstract class Test<A, B> : ITest<A, B>
    {
        private ITest<B, object> t1;

        protected Test(ITest<B, object> t)
        {
            t1 = t;
        }

        // Additional functionality for the Test class could be added here.
    }

    class Child1 : Test<int, string>
    {
        public Child1(ITest<string, object> t) : base(t)
        {
        }

        // Additional functionality for the Child1 class could be added here.
    }

    class Child2 : Test<string, bool>, ITest<string, object> // Explicitly implementing the needed interface
    {
        public Child2(ITest<bool, object> t) : base(t)
        {
        }

        // Additional functionality for the Child2 class could be added here.
    }

}

lkaoscv7

lkaoscv72#

这个错误在我看来是正确的。

  • t1Child1,也就是Test<string, string>
  • t2Child2
  • Child2的构造函数接受一个Test<bool, object>
  • t1无法从Test<string, string>转换为Test<bool, object>,因为其指定的类类型不匹配。简单地说,string不是bool

也许,您希望Child1Child2子类也是泛型的。

相关问题