2017-08-23 200 views
0
internal class MyClassA 
{ 
    [...properties...] 
    public List<string> DoSomething(){} 
} 

// Different project/assembly, same solution: 
public class MyBase 
{ 
    protected MyClassA _myClassA = new MyClassA(); // Here is the problem 

} 

// What I want to do: 
public class SomeOtherClass : MyBase 
{ 
    private static void Foo(){ 
     var list = _myClassA.DoSomething(); 
    } 
} 

SomeOtherClass繼承自MyBase。什麼是使內部類的對象繼承類「正常」的正確方法

MyBase應使MyClassA的一個實例通過SomeOtherClass(protected)進行訪問。

但是由於MyClassA是內部的,這是不可能的。

如何使MyOssClassA.DoSomething()在使用MyBase實例時可以使用MyOssClassA.DoSomething()? PS:我完全意識到「只需將MyClassA的可見性更改爲公開」的可能性,但這不是一個選項。

+2

https://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.internalsvisibletoattribute%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396 –

+0

我無法修改以任何方式使用MyClassA類。如果可以的話,我只需更改爲公共 –

+1

即可,不需要修改MyClassA,該屬性應用於程序集級別 –

回答

-1

您可以更改MyClassA的公開程度,以保護:

protected class MyClassA 
{ 
    [...properties...] 
    public List<string> DoSomething(){} 
} 

,如果你是「不能modifiy以任何方式類MyClassA」,那麼你不能。

封裝是OOP的一個基本主題,& C#主要是OO語言。

它不會讓你違反你無權訪問的類的封裝。

+0

投票答案沒有不正確的說法沒有ant評論???上面的所有註釋以及引用的重複答案都針對「讓內部類可見」這個問題的第一部分,而忽略了僅僅爲了「繼承類」而這樣做的上下文。 'InternalsVisibleTo'必須被預先應用,並且不能應用於所有的繼承類。如果OP說他不能修改課程,他爲什麼能修改這個比修改單個課程更有侵略性的項目? –

相關問題