开发者

Why is my class method not visible when I implement an interface in my class?

开发者 https://www.devze.com 2023-01-01 06:36 出处:网络
I cannot see MyLoad.TreeLoader(), but why? I have implemented iloader to TreeViewLoad. I should be able to see TreeLoader().

I cannot see MyLoad.TreeLoader(), but why? I have implemented iloader to TreeViewLoad. I should be able to see TreeLoader().

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

        private void Form1_Load(object sender, EventArgs e)
        {
            //treeView1.Nod开发者_C百科es.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);
            }
        }
    }
}


You are referring to the object through the interface, which means you only have access to the interface's methods and properties. The interface has a void loader method, TreeLoader belongs to the TreeViewLoad class.

TreeViewLoad myLoader = new TreeViewLoad();
// now you can access loader and TreeLoader.


you declare MyLoad variable as iloader interface so you can see only the interface methods here. To see TreeLoader method declare MyLoad of TreeViewLoad type


You declared the variable MyLoad to be of the interface type ILoader (I changed it from iloder to the more common convention for readability) and TreeLoader() is not a member of this interface and therefore you cannot access it. You can access it, if you cast the variable to TreeViewLoad.

ILoader myLoad = new TreeViewLoad();

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

But you should rethink your design - you should usually not have to cast an interface to the concrete type and the fact that you have to indicates that something may be wrong.


This is my answer:

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 
0

精彩评论

暂无评论...
验证码 换一张
取 消