【问题标题】:Why is my class method not visible when I implement an interface in my class?为什么在我的类中实现接口时我的类方法不可见?
【发布时间】:2011-02-25 12:56:34
【问题描述】:

我看不到MyLoad.TreeLoader(),但为什么呢? 我已经实现了iloaderTreeViewLoad。我应该可以看到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);
            }
        }
    }
}

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 我想要那个:iloader MyLoad = new TreeViewLoad();
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      ILoader myLoad = new TreeViewLoad();
      
      ((TreeViewLoad)myLoad).TreeLoader(...);
      

      但是你应该重新考虑你的设计——你通常不应该将接口强制转换为具体类型,而且你必须表明可能有问题的事实。

      【讨论】:

        【解决方案4】:

        这是我的回答:

        命名空间递归
        {
            公共部分类Form1:表格
            {
                公共表格1()
                {
                    初始化组件();
                }
        
                私人无效Form1_Load(对象发送者,EventArgs e)
                {
                    iloader MyLoad = new TreeViewLoad();
                    ((TreeViewLoad)MyLoad).TreeLoader(treeView1);
                }
            }
        
            接口加载器
            {
                void loader(string nodeName, TreeView myTre, int id);
            }
        
            类 TreeViewLoad : iloader
            {
                公共无效 TreeLoader(TreeView myTre)
                {
                    装载机(“测试”,myTre,1);
                }
        
        
                公共无效加载程序(字符串节点名,TreeView myTre,int id)
                {
        
                    myTre.Nodes.Add(nodeName + id.ToString());
                    if (id 

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-07-14
          • 1970-01-01
          • 1970-01-01
          • 2016-06-14
          • 1970-01-01
          • 1970-01-01
          • 2013-01-27
          • 2013-09-06
          相关资源
          最近更新 更多