Con el código de abajo, ReSharper plantea una 'llamada miembro virtual en el constructor' advertencia:Llamada de miembro virtual en el constructor: ¿por qué una está bien y la otra no?
public class UserDetailViewModel : Screen
{
public UserDetailViewModel()
{
// DisplayName is a virtual member of Screen
DisplayName = "User Details";
}
}
Mientras que si se cambia el código así que es como esta, la advertencia desaparece:
public class UserDetailViewModel : Screen
{
public UserDetailViewModel()
{
SetName();
}
private void SetName()
{
DisplayName = "User Details";
}
}
¿Por qué uno levanta una advertencia y el otro no? ¿Es la segunda forma de alguna manera correcta, o está más allá del límite de lo que ReSharper puede detectar como potencialmente peligroso?
Gracias jalf. Para evitar el problema, ¿es aceptable cambiar 'SetName()' para que sea público y llamarlo después de la instanciación, por ejemplo: 'userDetailViewModel.SetName();'? ¿O hay una mejor solución? (Esta debería ser una pregunta nueva, lo sé) – Town
Es posible encontrar que el constructor puede potencialmente llamar a un miembro virtual sin detener el análisis. –
@Town 'new UserDetailViewModel(). SetName()' no es una buena opción porque hace que el que llama tenga la responsabilidad de llamar a 'SetName()'. Preferiría ignorar la advertencia en su lugar. –