Почему мой метод класса не виден, когда я реализую интерфейс в своем классе? - PullRequest
3 голосов
/ 29 мая 2010

Я не вижу MyLoad.TreeLoader(), но почему? Я реализовал iloader до TreeViewLoad. Я должен быть в состоянии увидеть TreeLoader().

namespace Rekursive
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //treeView1.Nodes.Add("Test");
            iloader MyLoad = new TreeViewLoad();
            MyLoad.loader("test", treeView1, 1);
        }
    }

    interface iloader
    {
        void loader(string nodeName, TreeView myTre, int id);
    }

    class TreeViewLoad : iloader
    {
       public void TreeLoader(TreeView tre)
        {
           // Here I want to call the loader
        }

        public void loader(string nodeName, TreeView myTre, int id)
        {
            myTre.Nodes.Add(nodeName + id.ToString());
            if (id < 10)
            {
                id++;
                loader(nodeName, myTre, id);
            }
        }
    }
}

Ответы [ 4 ]

5 голосов
/ 29 мая 2010

Вы обращаетесь к объекту через интерфейс, что означает, что вы имеете доступ только к методам и свойствам интерфейса. В интерфейсе есть метод загрузчика void, TreeLoader принадлежит классу TreeViewLoad.

TreeViewLoad myLoader = new TreeViewLoad();
// now you can access loader and TreeLoader.
2 голосов
/ 29 мая 2010

вы объявляете переменную MyLoad как интерфейс iloader, так что вы можете видеть только методы интерфейса здесь. Чтобы увидеть метод TreeLoader, объявите MyLoad типа TreeViewLoad

1 голос
/ 29 мая 2010

Вы объявили, что переменная MyLoad имеет тип интерфейса ILoader (я изменил ее с iloder на более распространенное соглашение для удобства чтения), а TreeLoader() не является членом этого интерфейса, и поэтому вы не можете доступ к нему. Вы можете получить к нему доступ, если приведете переменную к TreeViewLoad.

ILoader myLoad = new TreeViewLoad();

((TreeViewLoad)myLoad).TreeLoader(...);

Но вы должны переосмыслить свой дизайн - обычно вам не нужно приводить интерфейс к конкретному типу, а тот факт, что вы должны указать, может указывать на то, что что-то может быть не так.

0 голосов
/ 29 мая 2010

Это мой ответ:

namespace Rekursive
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            iloader MyLoad = new TreeViewLoad();
            ((TreeViewLoad)MyLoad).TreeLoader(treeView1);
        }
    }

    interface iloader
    {
        void loader(string nodeName, TreeView myTre, int id);
    }

    class TreeViewLoad : iloader
    {
        public void TreeLoader(TreeView myTre)
        {
            loader("test", myTre, 1);
        }


        public void loader(string nodeName, TreeView myTre, int id)
        {

            myTre.Nodes.Add(nodeName + id.ToString());
            if (id 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...