gpt4 book ai didi

c# - 访问所有者类中的内部接口(interface)

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

我有一个内部接口(interface)。通常我使用公共(public)接口(interface),但这次我将很多东西保留在内部。

现在的问题是,当我在一个实现内部接口(interface)的公共(public)类中时,该接口(interface)还包含一个内部成员,为什么我不能在不强制转换(显式实现)的情况下访问接口(interface)成员?我在“所有者”类里面,实现接口(interface)的类,完全在里面,我应该拥有所有权利,对吧?

如果我只在代码中使用一次转换,我不会介意,但事实并非如此。我在代码中有 10 次这样的星座。有点烦人。

我错过了什么吗?就像我说的,我通常不使用内部接口(interface)。

在你开始反对或发布这个问题如何重复之前,请留下评论,我会删除它。

代码如下:

internal class Poco
{
public string Str
{
get;
set;
}
}

internal interface ITest1
{
Poco Obj
{
get;
set;
}
}

public class Foo : ITest1
{
// Not working
Poco Obj
{
get;
set;
}
}

最佳答案

您将 internal 访问修饰符与接口(interface)的显式实现 混淆了。

接口(interface)是internal 的事实与其在实现类中的可见性无关。它仅限制对本地程序集的可见性。

显式实现允许名称冲突:

interface IKey1 { int ID { ... } }
interface IKey2 { int ID { ... } }

class MyOwnerClass : IKey1, IKey2 // requires explicit imp
{
int IKey1.ID { .... }
int IKey2.ID { .... }

// the only way to access this:
void Foo()
{
int i1 = ((IKey1)this).ID;

IKey2 ik2 = this;
int i2 = ik2.ID;

int i3 = ID; // error, otherwise: which one
}
}

您的核心问题:如何在不强制转换的情况下访问接口(interface)成员。在此示例中,对 this.ID 的任何引用都是不明确的。

并且不允许隐式实现具有冲突成员的接口(interface)。

why is private iKey.ID not working.

编译器控制此处的可见性,并使其比“私有(private)”更隐蔽。这类似于为什么不能在 interface IA { ... }

中使用 public

修改后

完全不同的情况:

internal class Poco { ... }     // this 'internal' is a problem 
internal interface ITest1 // this isn't
{
Poco Obj { } // Poco is an internal type
}

public class Foo : ITest1
{
// Not working
Poco Obj { ... } // property _and_ type need to be public
}

您正试图在公共(public)类上拥有一个公共(public)属性,但属于内部类型。
从程序集的外部看它:

 Foo f = ...;   // OK, Foo is a public Type
f.Obj = ...; // but we don't know the Type of Obj here

关于c# - 访问所有者类中的内部接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19241908/

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