В c # передать функцию из другого класса, не ставя ее [duplicate]

Добавить AddType application/x-httpd-php .php в файл httpd.conf, если вы используете Apache 2.4

5
задан DarkDestry 15 December 2014 в 16:35
поделиться

4 ответа

Чтобы любой код в статическом или нестационарном классе вызывал нестатический метод, вызывающий должен иметь ссылку на объект, на который выполнен вызов.

В вашем case, Bar 's MethodCaller должен иметь ссылку на Foo. Вы можете передать его в конструкторе Bar или любым другим способом, который вам нравится:

class Foo
{
    Bar b1 = new Bar(this);

    public object MethodToCall(){ /*Method body here*/ }
}

Class Bar
{
    private readonly Foo foo;

    public Bar(Foo foo) {
        // Save a reference to Foo so that we could use it later
        this.foo = foo;
    }

    public void MethodCaller()
    {
        // Now that we have a reference to Foo, we can use it to make a call
        foo.MethodToCall();
    }
}
2
ответ дан dasblinkenlight 20 August 2018 в 20:37
поделиться

Передача экземпляра конструктору:

class Bar
{
    private Foo foo;

    public Bar(Foo foo)
    { 
        _foo = foo;
    }

    public void MethodCaller()
    {
        _foo.MethodToCall();
    }
}

Использование:

Foo foo = new Foo();
Bar bar = new Bar(foo);
bar.MethodCaller();
2
ответ дан CodeCaster 20 August 2018 в 20:37
поделиться

Попробуйте следующее:

class Foo
{
    public Foo() { /*Constructor here*/ }
    Bar b1 = new Bar();

    public object MethodToCall(){ /*Method body here*/ }
}

Class Bar
{
    public Bar() { /*Constructor here*/ }
    Foo f1 = new Foo();
    public void MethodCaller()
    {
        f1.MethodToCall();
    }
}
0
ответ дан John Saunders 20 August 2018 в 20:37
поделиться
  • 1
    Это создаст новый экземпляр внутренней панели Foo. Я хочу обработать объект внутри Foo, а не внутри нового экземпляра Foo. – DarkDestry 15 December 2014 в 16:42
class Bar
{
    /*...*/

    public void MethodCaller()
    {
        var x = new Foo();
        object y = x.MethodToCall();
    }
}

Кстати, объекты вообще не имеют имен.

11
ответ дан lorond 20 August 2018 в 20:37
поделиться
  • 1
    Это сработает, но это создаст новый экземпляр Foo, который я не хочу. Переменные в Foo все равно останутся в старом экземпляре, а новый экземпляр x будет иметь новый набор переменных. Кроме того, im new с терминологией, и я хочу сказать reference / identifier вместо имени: P – DarkDestry 15 December 2014 в 16:38
Другие вопросы по тегам:

Похожие вопросы: