2014-03-25 109 views
0

假設我有一個內部類「B」,這是從一個抽象類派生抽象類屬性,例如如何訪問繼承到內部類

abstract class A 
{ 
    private int _abc; 
    public int abc 
    { 
     get{return _int;} 
     set{_abc=value;} 
    } 
} 
internal class B:A 
{ 

} 

我需要abc,使用不同的組件,我可以訪問它? ??請幫幫我。

+0

讓你的類'知道公共'或使用屬性'[InternalsVisibleTo(「OtherAssemblyName」)]' –

+0

請不要包含關於問題標題中使用的語言的信息,除非它沒有它沒有意義。標籤用於此目的。 –

回答

1

如果您需要安全是由某種原因內部,你有幾個方式從外部代碼

1)您可以使用InternalVisibleToAttribute授予友好組件

[assembly:InternalVisibleTo("Test.dll")] 
接入訪問內部訪問

2)可以使用Reflection訪問對象

object obj = <instance of your internal type>; 
var value = obj.GetType().GetProperty("abc").GetValue(obj); 

3的成員)可以引入一個公共接口這將提供一份合同給訪問ABC財產

public interface IAbcAccessor 
{ 
    int abc {get; set;} 
} 

internal abstract class A 
    : IAbcAccessor 
{ 
    private int _abc; 
    public int abc 
    { 
     get{return _int;} 
     set{_abc=value;} 
    } 

    int IAbcAccessor.abc 
    { 
     get{return abc;} 
     set{abc = value;} 
    } 
} 

外部代碼可以通過使用接口

var accessor = (IAbcAccessor)<instance of your internal type>; 
var value = accessor.abc; 
0

不能創建B的實例或聲明什麼的外面是B型的訪問屬性組件B在聲明。如

B b = whatever 

或者

A b = new B() 

,不允許B在宣佈大會之外。

但是如果你在一個B的聲明中裝配有一個公共的方法

public class C 
{ 
    public static A MakeAB() 
    { 
     return new B(); 
    } 
} 

,然後使用可以說

A a = C.MakeABe() 
任何裝配

,因爲B型不需要通過C.MakeAB()的調用者