Доступ к одному и тому же классу в нескольких формах - PullRequest
0 голосов
/ 13 марта 2012

У меня есть класс с открытыми методами, определенными так:

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

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

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

И я хочу инициализировать класс в Form1, скажем:

Core1 newcore = new Core1();

И затем получить доступ к некоторым изпубличные методы newcore (DmSmth () для ex.), в некоторых других формах, скажем, Form3 или Form4.Каков наилучший способ сделать это?

Спасибо.

Ответы [ 6 ]

2 голосов
/ 13 марта 2012

В основном используется публичный статический экземпляр:

public static readonly Core1 Newcore = new Core1();

и доступ к нему в любом виде (обратите внимание, что это не потокобезопасный ):

var result = Form1.Core1.DmSmth();
2 голосов
/ 13 марта 2012

Вы можете сделать это с помощью Singleton Pattern

1 голос
/ 13 марта 2012

Если имеет смысл, чтобы когда-либо существовал только один экземпляр Core1, либо потому, что у него нет состояния (только методы, которые действуют исключительно на параметры; это можно было бы назвать служебным классом), тогда он может быть статическим вместе с его методом (ами), так что он никогда не должен существовать. Если это может быть один из нескольких экземпляров класса, то вы не должны использовать статические где-либо. Вы должны создать один в одной из форм (там, где это имеет смысл), а затем передать это значение другим формам. Это может быть либо через открытые свойства, через конструкторы и т. Д.

0 голосов
/ 14 марта 2012

Если вы разделяете только один экземпляр этого объекта Core1, то вы можете сделать это

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

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

В других формах вы можете сделать что-то вроде следующего, чтобы получить объект

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

Я бы не рекомендовал вам делать публичные переменные, свойство дало бы вам лучший контроль и гибкость

0 голосов
/ 13 марта 2012

Создайте статическую общедоступную переменную нового ядра, например:

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

Если это поможет

0 голосов
/ 13 марта 2012

Вы можете предоставить открытое свойство в Form1, чтобы обеспечить доступ ко всему объекту или некоторым его свойствам / методам.

private Core1 newcore = new Core1();

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

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

Если другой форме нужен доступ, ей нужна ссылка на Form1.Например, передав экземпляр в конструктор Form2 или любые другие методы или используя Application.OpenForms.

В общем случае лучше обеспечить минимальный доступ к внешним классам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...