2012-04-25 82 views
1

這段代碼有什麼問題?不一致的可訪問性:屬性類型

public ScreenManager _ScreenManager 
     { 
      get { return screenManager; } 
      internal set { screenManager = value; } 
     } 
     ScreenManager screenManager; 

,我得到這個錯誤:

Inconsistent accessibility: field type 'ScreenSystem.ScreenManager' is less accessible than field 'ScreenSystem.Screen.ScreenManager' 
+6

值得注意的是:用下劃線開始公共屬性的名稱可能不是一個好主意。下劃線通常保留給私人領域(局部變量)。 – 2012-04-25 19:46:03

+0

你可以發佈一些更多的代碼?從您發佈的內容中獲取完整圖片很難。 – 2012-04-25 19:47:46

回答

12

我要去假設類型ScreenManagerinternal而類包含你的財產是公開的。

編譯器說可公開訪問的字段(ScreenSystem.Screen.ScreenManager)是不可公開訪問的類型(ScreenSystem.ScreenManager)。

反正你的領域一般應該是private。而且您可能會在班級ScreenSystem.ScreenManager(它默認爲internal IIRC)前丟失public

2

這意味着您已將ScreenManager設置爲私人或受保護的,但您正在嘗試製作一個依賴於ScreenManager的公共財產。你不能那樣做。

使ScreenManager公開或使_ScreenManagerScreenManager具有相同的可訪問性。

4

這是您的方案:

namespace ScreenSystem 
{ 
    internal class ScreenManager 
    { 
     public string Test { get; set; } 
    } 
} 

namespace ScreenSystem 
{ 
    public class Screen 
    { 
     public ScreenManager Manager 
     { 
      get; internal set; 
     } 
    } 
} 

Compiler Output
Inconsistent accessibility: property type 'ScreenSystem.ScreenManager' is less accessible than property 'ScreenSystem.Screen.Manager'

這裏有解決方案,這取決於你想做什麼:

  • 充分利用Screen類內部
  • 充分利用ScreenManager class public
  • Make ScreenManager類公共和Screen類內部
  • 充分利用Screen.Manager財產內部(並取下內部set訪問)

無論是上述一個將編譯沒有錯誤。這實際上取決於你想要達到的目標。

+0

這很確定。 – 2012-04-25 19:44:10

+0

@RobertHarvey:你是什麼意思?你是否同意我的回答? – 2012-04-25 19:46:24

+0

似乎顯而易見... – 2012-04-25 19:47:41