【问题标题】:Inconsistency accessibility: parameter type不一致的可访问性:参数类型
【发布时间】:2014-01-29 20:33:23
【问题描述】:

我已经浏览了这里的几篇帖子,但我发现没有一个解决方案对我有用。当您单击菜单项时,我试图将对象从表单 a 传递到表单 b,它给了我错误:

错误 1 ​​可访问性不一致:参数类型“WindowsFormsApplication1.character”的可访问性低于方法“WindowsFormsApplication1.CharBuilder.CharBuilder(WindowsFormsApplication1.character)”

这是发送表格:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class GVL4 : Form
    {
        public GVL4()
        {
            InitializeComponent();
        }

        public void mNewGame_Click(object sender, EventArgs e)
        {
            character MyCharacter = new character();

            MyCharacter.SetIsNew();

            CharBuilder NewCharacter = new CharBuilder(MyCharacter);

            NewCharacter.Show();
        }
    }
}

以及接收表格:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class CharBuilder : Form
    {
        character Char = new character();

        public CharBuilder()
        {
            InitializeComponent();
        }

        //Overloaded Constructor
        public CharBuilder(character cChar)
        {
            Char = cChar;
        }

        private void txtSect_TextChanged(object sender, EventArgs e)
        {

        }

        private void btnSaveID_Click(object sender, EventArgs e)
        {
            if (Char.IsNew())
            {
                Char.SaveCharIdentity(txtCharName.Text, txtClan.Text, txtSect.Text, txtNature.Text, txtDemeanor.Text, txtTitle.Text, txtCoterie.Text, txtSire.Text, txtPlayerName.Text, txtCharacterID.Text, txtStatus.Text, Convert.ToInt32(txtUnspentXP.Text), Convert.ToInt32(txtEarnedXP.Text), Convert.ToInt32(txtGeneration.Text), Convert.ToInt32(txtBloodPool.Text), cbxNPC.Checked);
            }

            txtTestBox.Text = Char.ToString();
        }

        public void CharBuilder_Load(object sender, EventArgs e)
        {

        }

    }
}

错误在于重载(Public CharBuilder(character cChar))

【问题讨论】:

  • 发布定义您的字符类的代码,这可能是问题的根源。

标签: c# winforms


【解决方案1】:

character 类在哪里定义?我怀疑这是GVL4 中的一个私有类?错误告诉您的是,即使您将character 的实例传递给CharBuilderCharBuilder 实际上也无法知道 what character对象。它正在接收一个对象,但它没有定义该对象的类。

确保character 类对于这两种形式都是已知的。我想它应该只是在项目的其他地方定义的一个单独的类,可能是公共的或内部的,而不是任何特定形式的内部。

旁注:您的代码很难阅读,因为您没有遵循 C# 约定。类/类型名称应以大写开头,局部变量名称应以小写开头。

【讨论】:

  • 几个小时前我才开始用 C# 编码,我对这些约定一无所知。不过感谢您提供的信息,我会确保查找它们并尝试合并它们。
【解决方案2】:

这意味着您的character 类比public 更难访问,就像您的公共方法一样。您需要确保访问修饰符相同。我不确定你的类设计,所以不确定最好的路线是什么,但如果没有人将你的代码用作库,只需公开字符类即可。

【讨论】:

  • 呸。当然。我正在查看表单代码,而不是我的角色类。它没有明确宣布公开。感谢您的帮助!
【解决方案3】:

您没有发布您的角色类的代码,但听起来该类被标记为 public 以外的东西,这就是您看到此错误的原因。将character 类的声明更改为public,它将起作用。

【讨论】:

    猜你喜欢
    • 2015-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-07
    • 1970-01-01
    相关资源
    最近更新 更多