Можете ли вы переопределить автоматически зафиксированное значение параметра, связанного с CallerMemberName, явно передав значение? - программирование
Подтвердить что ты не робот

Можете ли вы переопределить автоматически зафиксированное значение параметра, связанного с CallerMemberName, явно передав значение?

У меня есть ситуация, когда в каком-то контексте я хочу передать явное значение моему методу с параметром, отмеченным именем CallerMemberName, и из других контекстов, которые я хочу, чтобы он автоматически захватывал. Я хочу знать, возможно ли это, или будет ли атрибут всегда иметь приоритет?

Почему я хочу это сделать, спросите вы. Я пишу аудиторский компонент, который можно вызывать из любого места. Требуются некоторые параметры, необходимые для контекста аудита, а также параметр CallerMemberName. Но на некоторых моих суперклассах у меня уже есть определенные биты информации, относящиеся к аудиту, поэтому я написал там метод, который принимает только параметр CallerMemberName. Затем он обращается к моему компоненту аудита, передавая параметры, которые у него уже есть в этом контексте, а также имя члена вызывающего абонента, которое оно уже неявно зафиксировано.

4b9b3361

Ответ 1

Да, это возможно, поэтому его можно использовать как неявно, так и явно.

private void CaptureCaller(
     [CallerMemberName] string callerMemberName = "")
{
    // callerMemberName will contain the name of the method that called CaptureCaller if called with no parameters.
    // callerMemberName will contain the value of the passed in parameter if provided.
}

CaptureCaller();
CaptureCaller("custom value");