gpt4 book ai didi

C# : interface : same method in 2 interfaces

转载 作者:太空宇宙 更新时间:2023-11-03 17:18:31 25 4
gpt4 key购买 nike

我有 2 个接口(interface),

    public interface I1
{
string GetRandomString();
}

public interface I2
{
string GetRandomString();
}

并且在类里面,我已经植入了两者,

    public class ClassA : I1, I2
{

string I1.GetRandomString()
{
return "GetReport I1";
}

string I2.GetRandomString()
{
return "GetReport I1";
}

}

现在在main方法中我想访问,这些接口(interface)方法却不能访问

    static void Main(string[] args)
{
var objClassA = new ClassA();
objClassA.GetRandomString(); // not able to do this, comile time error ...
}

我知道,我缺少一些基本的 OOPS 内容,只是想知道。任何帮助?

最佳答案

如果您有时想使用一个界面,有时又想使用另一个界面,则可能有必要对其中的最后一个界面使用强制转换。如果您控制类型并且可以直接使用其中一个接口(interface)函数而不是作为显式实现,那么将避免对该函数进行强制转换的要求。为避免必须对任一函数进行类型转换,您应该使它们在对象中以单独的名称可用。因为在 C# 中,任何实现 anyInterface.Boz 的方法都必须调用 Boz,最好的方法可能是让 IFoo.Boz 和 IBar.Boz 的实现简单地调用名为 FooBoz 和 BarBoz 的公共(public)方法,然后可以“直接”调用它们而无需歧义。

虽然转换到接口(interface)对于类来说成本低,但对于结构来说可能代价高昂。在某些情况下,可以通过使用如下静态方法来避免此成本:

    public interface AliceFoo { void foo();};    public interface BobFoo { void foo();};    static void do_alice_foo<T>(ref T it) where T:AliceFoo    {        it.foo();    }    static void do_bob_foo<T>(ref T it) where T : BobFoo    {        it.foo();    }

这种方法允许使用任一“foo”方法,而无需进行任何类型转换。

关于C# : interface : same method in 2 interfaces,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6639461/

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