我有一个类,其公共方法定义如下:
public class Core1 {
//...
//...
public void DoSmth()
{
//....
}
//.....
//....
}
public partial class Form1 : Form
{
//.....
我想在Form1中初始化类,比如说:
Core1 newcore = new Core1();
然后访问一些newcore的公共方法(例如DmSmth()),在其他一些形式中,比如说Form3或Form4。这样做的最佳方式是什么?
感谢。
答案 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,属性会给你更好的控制和灵活性