使DLL访问外部类对象

时间:2010-11-13 15:17:36

标签: c#

我知道标题不是不言自明的,但这是我提出的最简单的标题。

基本上,我有一个.NET DLL和一个.NET表单应用程序。在这种形式中,我加载这个DLL并创建一个类,让我们说:

MyClass a = new MyClass();

我有:

public string DataBridge
{
 get { return String.Empty; }
 set { txtHistory.Text += value + "\r\n"; }
}

在我的表单中,我想访问MyClass中的这个DateBridge字符串,该字符串位于我的.NET DLL中。

我不确定是否清楚,如果有一点您不明白,请告诉我。

3 个答案:

答案 0 :(得分:1)

MyClass需要提供表单的参考。

答案 1 :(得分:0)

您的.NET Forms应用程序必须具有对.NET dll的引用。如果您使用Visual Studio进行编程,只需在解决方案资源管理器中右键单击该项目,然后选择“添加引用”,找到包含MyClass的DLL。

由于您可以在一个解决方案中打开多个项目,您可以选择添加对MyClass项目的引用而不是DLL文件,这将确保您的MyClass中的更改将自动显示在.NET Forms项目中

如果您不使用Visual Studio,而是使用其他工具(例如SharpDevelop),请查看该工具的文档以了解如何添加另一个项目或dll的引用。

如果您根本不使用工具,但使用CSC.exe编译器编译代码,请参阅编译器的文档以了解如何在编译时包含对外部dll的引用。

答案 2 :(得分:0)

MyClass无法了解您的表单(或您的表单不知道MyClass),因为这会产生循环依赖。你需要通过双方都知道的事情。在这种情况下,接口或委托可能是合适的。不幸的是,c#不能创建属性的委托。

首先,我想要注意一些关于你的事情DataBridge

  1. get { return String.Empty; }如果您不需要使用结果,可以跳过getter并仅使用setter。
  2. set { txtHistory.Text += value + "\r\n"; },这是一个非常糟糕的设计,制定者不应该有这种副作用。如果您为一个设定者指定多次相同的值,您希望它产生的结果与您刚刚指定一次的结果相同 您的DataBridge应该是一种方法(如DataBridgeAppend(string s))。
  3. 如果您改为创建方法

    public string DataBridgeAppend(string s)
    {
        txtHistory.Text += s + Environment.Newline;
        // or even better  txtHistory.AppendText(s + Environment.Newline);
    }
    

    您可以将课程更改为此

    public class MyClass
    {
        private Action<string> _dataBridgeAppend;
        public MyClass(Action<string> dataBridgeAppend)
        {
            _dataBridgeAppend = dataBridgeAppend;
        }
    
        public void DoStuff()
        {
            // stuff
            _dataBridgeAppend("result"); // using the callback delegate to return stuff to the Form
        }
    }
    
    从Form1

    您实例化MyClass就像这样

    MyClass a = new MyClass(this.DataBridgeAppend);