gpt4 book ai didi

C# 方法重载和泛型接口(interface)

转载 作者:太空狗 更新时间:2023-10-29 18:35:48 26 4
gpt4 key购买 nike

<分区>

我对我们项目中的一个问题感到困惑。我试图简化它以重现效果:

interface IBar { }

class Bar : IBar {}

interface IFoo<T> where T : IBar { }

class Foo<T> : IFoo<T> where T : IBar { }


class Class1
{
public void DoTheFoo<T>(T bar) where T : IBar
{}

public void DoTheFoo<T>(IFoo<T> foo) where T : IBar
{}


public void Test()
{
var bar = new Bar();
var foo = new Foo<Bar>();

DoTheFoo(bar); // works

DoTheFoo<Bar>(foo); // works
DoTheFoo((IFoo<Bar>)foo); // works
DoTheFoo(foo); // complains
}
}

对我来说这看起来不错,但编译器在最后一次调用时提示,因为它试图 DoTheFoo<T>(T bar) , 而不是 DoTheFoo<T>(IFoo<T> foo)并提示参数类型不合适。

  • 当我删除方法时 DoTheFoo<T>(T bar) ,最后一次通话有效!
  • 当我将其更改为 DoTheFoo<T>(Foo<T> foo) 时, 它有效,但我不能使用它

在我们当前的代码中解决这个问题并不难。但是 a) 奇怪 b) 太糟糕了,我们不能拥有这两个重载方法。

是否有解释此行为的通用规则?是否可以让它工作(除了给方法不同的名称)?

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com