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'
4

3 に答える 3

12

ScreenManagerタイプはinternal、プロパティを含むクラスがパブリックである間であると想定します。

コンパイラーは、パブリックにアクセス可能なフィールド(ScreenSystem.Screen.ScreenManager)は、パブリックにアクセスできないタイプ(ScreenSystem.ScreenManager)であると言っています。

あなたの分野は一般的にprivateとにかくあるべきです。publicまた、クラスの前にaがない可能性がありますScreenSystem.ScreenManager(デフォルトはinternalIIRCです)。

于 2012-04-25T19:41:53.343 に答える
4

これがあなたのシナリオです:

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

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

コンパイラ出力
一貫性のないアクセシビリティ: プロパティ タイプ 'ScreenSystem.ScreenManager' は、プロパティ 'ScreenSystem.Screen.Manager' よりもアクセスしにくいです

あなたがしようとしていることに応じて、解決策は次のとおりです。

  • クラスをScreen内部にする
  • クラスをScreenManager公開する
  • クラスをScreenManager公開し、Screenクラスを内部にする
  • Screen.Manager プロパティをinternal にします(そして internal set アクセサーを削除します)

上記のいずれかがエラーなしでコンパイルされます。それは本当にあなたが達成しようとしていることに依存します。

于 2012-04-25T19:43:43.880 に答える
2

これは、ScreenManagerプライベートまたは保護として設定したにもかかわらず、に依存するプロパティをパブリックにしようとしていることを意味しますScreenManager。あなたはそれをすることはできません。

公開ScreenManagerするか_ScreenManager、と同じアクセシビリティを作成しますScreenManager

于 2012-04-25T19:42:59.677 に答える