Получение экземпляра, который названный методом в C#

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

Например:

public class Class1 {

    public void Method () {
        //the question
        object a = ...;//the object that called the method (in this case object1)
        //other instructions
    }

}

public class Class2 {

    public Class2 () {
        Class1 myClass1 = new Class1();
        myClass1.Method();
    }

    public static void Main () {
        Class2 object1 = new Class2();
        //...
    }

}

Там какой-либо путь состоит в том, чтобы сделать это?

16
задан Willem Van Onsem 25 December 2015 в 02:59
поделиться

4 ответа

Очевидно, что я не знаю точных деталей вашей ситуации, но это действительно кажется, что вам нужно немного переосмыслить вашу структуру.

Это легко сделать, если правильно структурировать наследование.

Подумайте о том, чтобы посмотреть на абстрактный класс и классы, которые наследуются от упомянутого абстрактного класса. Возможно, Вы даже сможете сделать то же самое с интерфейсами.

-6
ответ дан 30 November 2019 в 23:27
поделиться

Вы можете перейти к текущей трассировке стека в коде и подняться на один шаг вверх. http://msdn.microsoft.com/en-us/library/system.diagnostics.stacktrace.aspx

Но, как было сказано ниже, это даст вам метод и класс, вызывающий вас, но не экземпляр (если он есть, конечно, может быть статическим).

1
ответ дан 30 November 2019 в 23:27
поделиться

или просто передайте объект как параметр метода.

public void Method(object callerObject)
{
..
}

и вызовите Метод:

myClass.Method(this);

с уважением, Флориан

-2
ответ дан 30 November 2019 в 23:27
поделиться

Было бы очень плохим стилем, поскольку

a) он нарушил бы инкапсуляцию
b) невозможно узнать тип вызывающего объекта во время компиляции, поэтому что бы вы ни делали с объектом позже, это, вероятно, не сработает.
в) было бы проще / лучше, если бы вы просто передали объект в конструктор или метод, например:

Class1 c1 = new Class1(object1);
-1
ответ дан 30 November 2019 в 23:27
поделиться
Другие вопросы по тегам:

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