以多种形式访问同一个类

时间:2012-03-13 18:24:33

标签: c# winforms class

我有一个类,其公共方法定义如下:

public class Core1 {
//...
//...
  public void DoSmth()
  {
    //....
  }

  //.....
  //....
}

public partial class Form1 : Form
    {
    //.....

我想在Form1中初始化类,比如说:

Core1 newcore = new Core1();

然后访问一些newcore的公共方法(例如DmSmth()),在其他一些形式中,比如说Form3或Form4。这样做的最佳方式是什么?

感谢。

6 个答案:

答案 0 :(得分:2)

您可以使用Singleton Pattern

执行此操作

答案 1 :(得分:2)

基本上使用公共静态实例:

public static readonly Core1 Newcore = new Core1();

以任何形式访问它(请注意,这不是thread safe):

var result = Form1.Core1.DmSmth();

答案 2 :(得分:1)

如果只有一个Core1实例才有意义,或者因为它没有任何状态(只有那些只对参数起作用的方法;这可以称为实用程序类)然后它可以是静态的,以及它的方法,以便它永远不需要存在。如果它可能是该类的多个实例之一,那么您不应该在任何地方使用静态。您应该创建一个表单中的一个(在任何有意义的地方),然后将该值传递给其他表单。这可以通过公共财产,通过构造函数等来实现。

答案 3 :(得分:0)

您可以在Form1中提供公共属性,以提供对整个对象或其中某些属性/方法的访问权。

private Core1 newcore = new Core1();

public Core1 Core
{
    get { return newcore; }
    set { newcore = value; }
}

public void DoSmthWithCore()
{
    newcore.DoSmth();
}

如果其他表单需要访问权限,则需要引用Form1。例如,通过将实例传递给Form2的构造函数或其中的任何方法或使用Application.OpenForms

一般来说,最好提供对外层的最小访问权限。

答案 4 :(得分:0)

创建新核心ex的静态公共变量:

public partial class Form1 : Form
{
  public static Core1 newcore = new Core1();
}

并以表格2:

public partial class Form2 : Form
{
  public void Test()
  {
    Namespace.Form1.newcore.DoSmth();
  }
}

或者您可以将Core1设为静态类:

public static class Core1
{
  public static void DoSmth()
  {
  }
}

如果有帮助

答案 5 :(得分:0)

如果您只共享此对象Core1的一个实例,那么您可以执行此操作

// in Form1
static Core1 newcore = new Core1();

public static Core1 CoreObject
{
    get { return newcore; }
}

在其他形式中,您可以执行以下操作来获取对象

Core1 object = Form1.CoreObject;
// or...
Form1.CoreObject.SomeMethod();

我不建议你做公共var,属性会给你更好的控制和灵活性