Включение методов класса для вызова определенным образом - PullRequest
0 голосов
/ 12 июня 2011

То, что я хотел бы сделать, - это добавить атрибут к определенным методам класса, чтобы у этих методов, оформленных таким образом, можно было вызывать операторы в своем теле так, как мне нравится.

Например, рассмотрим этот сценарий на C #:

public class A
    {
    public A() {}

    [CallTwice()]
    public void Func1()
    {
        Console.WriteLine("Calling Func1().");
    }

    public void Func2()
    {
        Console.WriteLine("Calling Func2().");
    }
}

Я бы хотел сценарий, в котором, если бы я сделал это:

public static void Main()
{
    A a = new A();
    a.Func1();
    a.Func2();
}

, я бы получил такой вывод:

Calling A.Func1().
Calling A.Func1().
Calling A.Func2().

то есть мое оформление Func1 позволяет вызывать его дважды.

Что я хотел бы знать, так это то, как я мог бы написать код, чтобы использовать преимущества конкретного оформления, которое я дал Func1, чтобы я могзнаю, чтобы вызвать его тело заявления дважды.Возможно ли это в C #?

Ответы [ 3 ]

3 голосов
/ 12 июня 2011

Почему бы просто не сделать Func1 частным или защищенным и создать другой метод, который дважды вызывает Func1?

public class A
{
public A() {}

public void Func1()
{
    Func1Core();
    Func1Core();
}

private void Func1Core()
{
    Console.WriteLine("Calling Func1().");
}

public void Func2()
{
    Console.WriteLine("Calling Func2().");
}
}
0 голосов
/ 12 июня 2011

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

http://www.sharpcrafters.com/postsharp/documentation

0 голосов
/ 12 июня 2011

Вы можете заставить Func1 рекурсивно вызывать себя, уменьшая переменную count для каждого вызова.

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