Pergunta

Eu tenho uma classe public static em que eu gostaria de ter um método ToString ().

Defini-lo como ToString public static string (), mas obter o seguinte aviso:

peles 'Class.ToString ()' membro herdado 'Object.ToString ()'. Para fazer com que a corrente override membro que a implementação, adicione a palavra-chave override. Caso contrário, adicione a nova palavra-chave.

Se eu adicionar o override palavra-chave eu recebo este erro em vez disso:

Um membro estático 'Class.ToString ()' não pode ser marcado como override, virtual, ou abstrato

Como faço para me livrar desse aviso e deixar a minha classe estática tem o método ToString ().

Obrigado,
Keith

Foi útil?

Solução

Sim, usando o "novo" modificador irá efetivamente silenciar o aviso do compilador, mas você está explicitamente escondendo um método de instância com um método estático. (Isso é diferente do que substituindo o método.) Normalmente você não quer esconder um método de instância, exceto com razões muito boas e você realmente não deve escondê-lo com um método estático como que realmente muda a semântica comportamento da chamada. Cada objeto no .NET tem um método de instância chamado ToString () que tem um comportamento específico que os desenvolvedores esperam; ocultando que o comportamento com um método estático novo você está mudando essa expectativa que pode levar a uma grande confusão.

O que é você "para amarrar"? classes estáticas normalmente não possuem estado interno de modo que realmente não deve haver quaisquer dados internos para fornecer como a saída lógica de uma chamada ToString (). Você pode querer repensar seu projeto classe ou fornecer um nome método diferente que indica mais claramente o propósito do método sem esconder o ToString instância ().

Outras dicas

Em uma classe estática que você não pode substituir ToString. .ToString é um método de instância e, por definição, uma classe estática só pode ter membros estáticos.

Além disso, por que você deseja substituir .ToString ()? Não há nenhuma maneira de obter uma instância da classe e, portanto, nenhuma maneira de chamar a função.

Nota: Usando a nova sintaxe não irá substituir .ToString. Ele vai criar um novo membro que é completamente sem relação com o método Object.ToString ().

Ok, por isso, fazer a pergunta, eu encontrei uma resposta:

O novo modificador:

http://msdn.microsoft. com / en-us / library / 51y09td4 (VS.71) .aspx # vclrfnew_newmodifier

aqui é o método agora:

pública nova static string ToString ()

Obrigado, Keith

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top