Почему я не могу использовать метод из другого класса - PullRequest
0 голосов
/ 26 октября 2018

Я собираю приложение, но у меня возникает странная проблема, когда я не могу использовать какие-либо методы из класса, который я создал с помощью пары методов, в данный момент методы ничего не делают, потому что я Я просто получаю оболочку программы на месте. Я пытаюсь позвонить из класса Form1 ниже, в частности, с помощью нажатия кнопки, проверяющей определенную операцию с помощью переключателей.

Если щелкнуть btnDeviceControlAccept_Click, он проверяет, какие из переключателей и переходит к методу в классе DeviceControlMethods, например, Add, Change или Delete VLAN. Когда я использую объект (dc, DeviceControlMethods dc = new DeviceControlMethods ();), который я создал в Form1, я не могу использовать методы, даже если класс общедоступен или я устанавливаю методы в 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 голосов
/ 26 октября 2018

У вас проблемы с областью видимости.Прочитайте эту статью, чтобы узнать больше о области видимости в 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()
            {
            }
    }
0 голосов
/ 26 октября 2018

Я вижу только закрытые методы, вам нужно явно сделать их публичными, а не только класс.См. документы о модификаторах доступа

public
Доступ к типу или элементу может быть получен из любого другого кода в той же сборке или другой сборке, котораяссылается на это.

private
Доступ к типу или члену возможен только с помощью кода в том же классе или структуре.

защищен
Доступ к типу или члену возможен только с помощью кода в том же классе или в классе, производном от этого класса.

internal
Доступ к типу или элементу может быть получен из любого кода в той же сборке, но не из другой сборки.

защищенный внутренний
Доступ к типу или элементу может быть получен из любого кода в сборке, в которой он объявлен, или из производного класса в другой сборке.

частная защита
Доступ к типу или члену возможен только в пределах объявленной сборки, с помощью кода в том же классе или в типе, производном от этого класса.

Редактировать И, как утверждают и другие комментарии, методы, определенные в статическом конструкторе, также не будут доступны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...