试图在动态创建的类之间调用方法

时间:2012-05-03 14:44:54

标签: c#

我一直在尝试研究如何在不同的类中调用方法。这两个类都是在运行时动态创建的。我在这里看到的大多数问题都与继承有关,这与我所拥有的(我认为)不同。

我仍然是C#的新手,我正试图测试一些概念。

第一堂课是这样的:

public class Record
{
    CustomPanel _panel;

    public void recordFunc(){}
}

内部创建的类具有以下内容:

public class CustomPanel : Panel
{
    List<Control> _myControls = new List<Control>;
    // _myControls[0] += new EventHandler(myFunc);

    public void myFunc(object sender, EventArgs e)
    {
        // parentClass.recordFunc();
    }
}

我的目标是在数据库调用的运行时创建一个Record。此时,它会创建一个Panel(来自我的CustomPanel类),它将被添加到FlowLayoutControl中。当从面板的内部控件触发事件时,我需要让它更新父Record类的部分内容。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

由于Record实例包含CustomPanel,因此Record类中没有可用CustomPanel类的魔术实例。你必须自己建立这样的关系。 E.g。

public class Record
{
    CustomPanel _panel;
    public CustomPanel panel
    {
         get { return _panel; }
         set { _panel = value; _panel.parent = this; }
    }

    public void recordFunc(){}
}

public class CustomPanel : Panel
{
    public Record parent { get; set; }

    public void myFunc(object sender, EventArgs e)
    {
        parent.recordFunc();
    }
}

答案 1 :(得分:0)

我不是100%肯定你在问什么,但是你似乎想知道如何在类上调用函数,当你在运行时不知道类类型时,它可能是一个或者许多记录类型。那是对的吗?

如果是这样,一种干净地实现上述目的的方法是在派生类型上实现接口并调用接口方法。例如,如果您有多个“Record”类并且在运行时不知道类型,请尝试以下操作:

public interface IRecord 
{
    void RecordFunc();
} 

public class ARecord : IRecord
{
    public void RecordFunc()
    {
        Console.WriteLine("ARecord.RecordFunc");
    }
}

public class AnotherRecord : IRecord
{
    public void RecordFunc()
    {
        Console.WriteLine("AnotherRecord.RecordFunc");
    }
}

public class CustomPanel : Panel
{    
    private IRecord _parentRecord;

    // Where parentRecord could be ARecord or AnotherRecord
    public class CustomPanel(IRecord parentRecord)
    {
        _parentRecord = parentRecord;
    }

    public void MyFunc(object sender, EventArgs e)
    {
        _parentRecord.RecordFunc();
    }
}

如果那不是您想要的,请澄清。