为什么我不能使用另一类的方法

时间:2018-10-26 19:10:30

标签: c# methods

我正在组合一个应用程序,但遇到一个奇怪的问题,即我无法使用通过几种方法创建的类中的任何方法,这些方法目前无法执行任何操作,因为我只是将程序的外壳安装到位。我试图从下面的Form1类中调用,特别是从按钮单击中检查单选按钮的特定操作。

如果单击btnDeviceControlAccept_Click,它将检查哪个单选按钮并转到DeviceControlMethods类中的方法,例如“添加”,“更改”或“删除VLAN”。当我使用在Form1中创建的对象(dc,DeviceControlMethods dc = new DeviceControlMethods();)时,即使该类是公共的,或者我将方法设置为static并使用DeviceControlMethods.AddVlan等,我也无法使用这些方法

我确定我只是在做一些愚蠢的事情,因为我已经有一段时间没有使用C#了。

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 MFT___Configurator
{
    public partial class Form1 : Form
    {       
        public Form1()
        {
            InitializeComponent();
        }      
        private void label1_Click(object sender, EventArgs e)
        {
        }
        private void Form1_Load(object sender, EventArgs e)
        {

        }
        private void groupBox1_Enter(object sender, EventArgs e)
        {
        }
        private void btnDeviceControlAccept_Click(object sender, EventArgs e)
        {
            DeviceControlMethods dc = new DeviceControlMethods();
            if (rbAddDevice.Checked == true)
            {   
                dc.CreateVlan() // the method is not found
                 resutlBox.Clear();
            }
            else if (rbChange.Checked == true)
            {
                resutlBox.Clear();
            }
            else if (rbDelete.Checked == true)
            {
                resutlBox.Clear();
            }
            else
            {
                resutlBox.Clear();
                resutlBox.Text = "Select a valid operation; Add, Change or Delete.";
            }
        }

带有我要调用的方法的类;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MFT___Configurator
{
    public class DeviceControlMethods
    {
         static DeviceControlMethods()
         {
            string CreateVlan()
            {
                Console.WriteLine("ggg");
                return "";
            }
            string ChangeVlan()
            {
                return "";
            }
            void DeleteVlan()
            {
            }
        }
    }
}

2 个答案:

答案 0 :(得分:0)

我只看到私有方法,您需要显式地将它们公开,而不仅仅是类。参见the docs about access modifiers

  

公开
  该类型或成员可以由同一程序集或引用该程序集的另一个程序集中的任何其他代码访问。

     

私有
  类型或成员只能由相同类或结构中的代码访问。

     

受保护的
  该类型或成员只能由同一类或从该类派生的类中的代码访问。

     

内部
  可以通过同一程序集中的任何代码访问类型或成员,但不能从另一个程序集中访问该类型或成员。

     

受保护的内部
  可以通过声明了该类型或成员的程序集中的任何代码或从另一个程序集中的派生类中访问该类型或成员。

     

受私人保护
  该类型或成员只能在其声明程序集中,通过同一类或从该类派生的类型的代码访问。

修改 而且,正如其他注释所指出的那样,在静态构造函数中定义的方法也将无法访问。

答案 1 :(得分:0)

您的课程存在范围界定问题。通读本文以了解有关C#范围界定的更多信息。 https://msdn.microsoft.com/en-us/library/ms973875.aspx

但是要解决您的问题,请将您的班级更改为以下内容:

    public class DeviceControlMethods
    {
         public string CreateVlan()
            {
                Console.WriteLine("ggg");
                return "";
            }

            public string ChangeVlan()
            {
                return "";
            }

            public void DeleteVlan()
            {
            }
    }