1

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

我对 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();
    }
}

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

任何帮助是极大的赞赏。

4

2 回答 2

0

仅仅因为一个实例包含Record一个. 你必须自己建立这样的关系。例如CustomPanelRecordCustomPanel

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();
    }
}
于 2012-05-03T14:56:28.747 回答
0

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

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

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();
    }
}

如果这不是你要找的,请澄清。

于 2012-05-03T15:02:47.483 回答