从外部访问内部成员

时间:2011-06-09 12:53:22

标签: c# .net class interface accessibility

在SolutionA(名称空间名称)中,我从另一个类(Engine)调用内部类(ClassA)的memeber(functionA()),并通过接口(IClassA)调用此类。

IClassA声明了这个功能 Engine调用此函数并使用另一种方法(在本例中为smame方法名称)。

所以,如果我想在另一个解决方案中调用此内部成员。

所以在解决方案B中

我可以这样做:

using SolutionA;


IClassA iA;

iA = new Engine();

iA.fuctionA();

我想当我在iA之后执行[。]时它应该给functionA,但是intellisense不会在这里给出错误...

为什么我没有在SolutionB中获得functionA?

有关我的architechure的更多信息:

//IClassA.cs
namespace namespaceA
{
internal class ClassA
{
    public string FunctionA(){}
}
}

//Engine.cs

namespace namespaceA
{
public class Engine() : IClassA()
{
    public IClassA.FunctionA(){}
}
}

// IClassA.cs
namespace namespaceA
{
public interface IClassA()
{
    string FunctionA(string data);
}
}

//ClassB.cs

namespace namespaceB
{
using  namespaceA;

internal class Classb
{
    IClassA engine = new namespaceA.Engine();

    engine.FunctionA();  //here i am unable to get fuuction
}
}

2 个答案:

答案 0 :(得分:4)

IClassA接口是否声明了该函数?我的猜测是它没有。鉴于iA的编译时类是IClassA,编译器(和Intellisense)只允许您使用IClassA的成员。

答案 1 :(得分:0)

这不太可能是你的问题,但我会提到它,因为这是另一个可能导致你症状的问题。如果functionA具有[EditorBrowsable(EditorBrowsableState.Never)]属性,则当您在不同的程序集中时,它将不会显示在Intellisense中。虽然在这种情况下,忽略Intellisense并使用functionA仍然允许程序编译。