当前位置:  开发笔记 > 编程语言 > 正文

不一致错误C#

如何解决《不一致错误C#》经验,为你挑选了1个好方法。

我有一个问题,protected SceneItem scene = null;但我不明白为什么,错误是:

可访问性不一致:字段类型'AsteroidsFinal.Helpers.SceneItem'比字段'AsteroidsFinal.Helpers.Screen.scene'更难访问

using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;

namespace AsteroidsFinal.Helpers
{

abstract public class Screen
{
    #region Variables

    protected SceneItem scene = null;

    protected Screen overlay;

    protected SpriteBatch batch = null;

    protected Game game = null;

    #endregion

    #region Properties

    public Game GameInstance
    {
        get { return game; }
    }

    public SpriteBatch Sprites
    {
        get { return batch; }
    }    

    #endregion

    public Screen(AsteroidGame game)
    {
        this.game = game;

        if (game != null)
        {
            IGraphicsDeviceService graphicsService = (IGraphicsDeviceService)game.Services.GetService(typeof(IGraphicsDeviceService));
            this.batch = new SpriteBatch(graphicsService.GraphicsDevice);
        }
    }

    public virtual GameState Update(TimeSpan time, TimeSpan elapsedTime)
    {
        scene.Update(time, elapsedTime);

        return (overlay == null) ? GameState.None : overlay.Update(time, elapsedTime);
    }

    public virtual void Render()
    {
        scene.Render();

        if (overlay != null)
            overlay.Render();
    }

    public virtual void Shutdown()
    {
        if (overlay != null)
            overlay.Shutdown();

        if (batch != null)
        {
            batch.Dispose();
            batch = null;
        }
    }

    public virtual void OnCreateDevice()
    {
        IGraphicsDeviceService graphicsService = (IGraphicsDeviceService)game.Services.GetService(typeof(IGraphicsDeviceService));
        batch = new SpriteBatch(graphicsService.GraphicsDevice);
    }
}

}

David Morton.. 6

屏幕是公共课.因为它是一个公共类,所以您可以在内部创建派生类型,在程序集屏幕内部或外部,在程序集屏幕所在的内部创建派生类型.

"scene"受到保护,这意味着,它可以从任何派生自它所在类的类中访问,在本例中是Screen,但是,你还没有声明SceneItem,它是"场景"的类型.公开.如果开发人员从Screen派生,但是从程序集外部执行,那么他将无法访问SceneItem的类型,因为SceneItem很可能是内部的.

要解决此问题,您需要将Screen上的辅助功能修饰符限制为内部,或者您需要将SceneItem上的辅助功能修饰符修改为公共.



1> David Morton..:

屏幕是公共课.因为它是一个公共类,所以您可以在内部创建派生类型,在程序集屏幕内部或外部,在程序集屏幕所在的内部创建派生类型.

"scene"受到保护,这意味着,它可以从任何派生自它所在类的类中访问,在本例中是Screen,但是,你还没有声明SceneItem,它是"场景"的类型.公开.如果开发人员从Screen派生,但是从程序集外部执行,那么他将无法访问SceneItem的类型,因为SceneItem很可能是内部的.

要解决此问题,您需要将Screen上的辅助功能修饰符限制为内部,或者您需要将SceneItem上的辅助功能修饰符修改为公共.

推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有