как добавить хук в процессе создания объекта в .net - PullRequest
3 голосов
/ 15 июля 2010

Я хочу настроить поведение объекта до его создания.Я думаю, может быть, добавить несколько хуков в конструктор объекта и сделать изменения, будет выбор.Есть ли способ сделать это в .net?Большое спасибо заранее!

РЕДАКТИРОВАТЬ:

Вот пример:

Предположим, у нас есть класс Kid, который использует метод Perform для получения кредитав классе.

public class Kid
{
    public void Perform() { ... }
}

И Школа ведет на лекции:

public class School
{
    public void Chemistry() {
        // The school have a good chemistry teacher, so every kid study well
        // Kid.Perform() is modified to reflect that 
        Kid tom = new Kid();
        tom.Perform();
    }

    public void Biology() {
        //This class is boring, everyone will nap in 5~10 min
        // Kid.Perform() use a random number to simulate how 
        //long this kid can hold it.
        Kid tom = new Kid(); tom.Perform();
        Kid jerry = new Kid(); jerry.Perform();
    }
}

Мы хотим, чтобы каждый ребенок выступал одинаково, а я не хочу:

  1. Измените класс Kid, поскольку он создается из стороннего инструмента и широко используется где-то еще.
  2. Использовать наследование.

Ответы [ 3 ]

3 голосов
/ 15 июля 2010

В вашем случае вам придется добавить свою логику после вызова конструктора.Вы можете написать фабричный метод, который делает это;замена new SpecialObject() на MyExtendedSpecialObject.Create() не должна быть слишком сложной.

public static class MyExtendedSpecialObject
{
    public static SpecialObject Create()
    {
        var newObject = new SpecialObject();

        // Do something with newObject

        return newObject;
    }
}
0 голосов
/ 15 июля 2010

Вы можете использовать System.Activator для создания экземпляров.Вы также можете «подключиться» к активатору и выполнить ваши проверки.

0 голосов
/ 15 июля 2010

Вы бы просто добавили логику в конструктор объекта.Если вы имеете в виду процесс подключения к распределению памяти и т. Д., То это недоступно в .NET.

public class MyClass
{
    public MyClass()
    {
        // Constructor logic here...
    }

    public MyClass(string name)
    {
         // Overloaded constructor logic here...
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...