为什么在我的类中实现接口时,我的类方法不可见?

时间:2010-05-29 18:17:25

标签: c# .net visual-studio visual-studio-2008 oop

我看不到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 个答案:

答案 0 :(得分:5)

您通过界面引用该对象,这意味着您只能访问该界面的方法和属性。该接口有一个void loader方法,TreeLoader属于TreeViewLoad类。

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

答案 1 :(得分:2)

您将MyLoad变量声明为iloader接口,因此您只能在此处查看接口方法。要查看TreeLoader方法,请声明TreeViewLoad类型的MyLoad

答案 2 :(得分:1)

您声明变量MyLoad属于接口类型ILoader(我将其从iloder更改为更常见的可读性约定)并且TreeLoader()不是此接口的成员,因此您无法访问它。如果将变量强制转换为TreeViewLoad,则可以访问它。

ILoader myLoad = new TreeViewLoad();

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

但是你应该重新考虑你的设计 - 你通常不需要为具体类型建立一个接口,而且必须表明某些事情可能是错误的。

答案 3 :(得分:0)

这是我的回答:

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