Eu me acostumei a muitos dos Java IDEs ( Eclipse , NetBeans e IntelliJ IDEA ), fornecendo um comando para gerar um construtor padrão para uma classe com base nos campos da classe.
Por exemplo:
public class Example
{
public decimal MyNumber { get; set; }
public string Description { get; set; }
public int SomeInteger { get; set; }
// ↓↓↓ This is what I want generated ↓↓↓
public Example(decimal myNumber, string description, int someInteger)
{
MyNumber = myNumber;
Description = description;
SomeInteger = someInteger;
}
}
Ter um construtor preenchendo todos os campos de um objeto é uma tarefa tão comum na maioria dos idiomas OOP, presumo que haja uma maneira de economizar tempo escrevendo esse código padrão em C #. Eu sou novo no mundo C #, então estou me perguntando se estou perdendo algo fundamental sobre o idioma. Existe alguma opção no Visual Studio que é óbvia?
No Visual Studio 2015 Update3, tenho esse recurso.
Apenas realçando propriedades e pressione Ctrl+ .e, em seguida, pressione Gerar Construtor .
Por exemplo, se você destacou duas propriedades, sugerirá que você crie um construtor com dois parâmetros e, se você selecionou três, sugerirá um com três parâmetros e assim por diante.
Também funciona com o Visual Studio 2017.
fonte
public int Age { get; }
) Eles precisam ter nos setters especificados, mesmo que temporariamente, para que a opção esteja disponível. Testado na comunidade VS2015; não tenho certeza se isso foi corrigido no VS2017.O C # adicionou um novo recurso no Visual Studio 2010 chamado gerar a partir do uso. A intenção é gerar o código padrão a partir de um padrão de uso. Um dos recursos é gerar um construtor baseado em um padrão de inicialização.
O recurso é acessível por meio da marca inteligente que aparecerá quando o padrão for detectado.
Por exemplo, digamos que tenho a seguinte classe
E escrevo o seguinte na minha inscrição
int
Não existe um construtor usando uma marca, então uma marca inteligente será exibida e uma das opções será "Gerar stub do construtor". A seleção que modificará o código paraMyType
ser o seguinte.fonte
Você pode escrever uma macro para fazer isso - você usaria o analisador do Visual Studio para recuperar informações sobre os membros da classe.
Eu escrevi uma macro semelhante. (Compartilharei o código abaixo). A macro que escrevi é para copiar adiante todos os construtores de uma classe base quando você a herdar (útil para classes como Exception que possuem muitas sobrecargas no ctor).
Aqui está minha macro (novamente, isso não resolve o seu problema, mas você provavelmente pode modificar para fazer o que quiser)
fonte
A partir do Visual Studio 2017, esse parece ser um recurso interno. Pressione Ctrl+ .enquanto o cursor estiver no corpo da classe e selecione "Gerar construtor" na lista suspensa Ações rápidas e refatorações .
fonte
Aqui está uma macro que eu uso para esse fim. Ele irá gerar um construtor a partir de campos e propriedades que possuem um setter privado.
fonte
Talvez você possa experimentar isso: http://cometaddin.codeplex.com/
fonte
Você pode fazer isso facilmente com o ReSharper 8 ou posterior. A
ctorf
,ctorp
ectorfp
trechos gerar construtores que povoam todos os campos, propriedades ou campos e propriedades de uma classe.fonte
Aqui está a macro do Visual Studio do JMarsh modificada para gerar um construtor com base nos campos e propriedades da classe.
fonte
Para o Visual Studio 2015, encontrei uma extensão que faz exatamente isso. Parece funcionar bem e possui uma quantidade razoavelmente alta de downloads. Portanto, se você não pode ou não deseja usar o ReSharper, pode instalar este.
Você também pode adquiri-lo via NuGet .
fonte
Estou usando o seguinte truque:
Seleciono a declaração da classe com os membros dos dados e pressiono:
Ctrl+ C, Shift+ Ctrl+ C, Ctrl+ V.
O PROGRAMA obtém a declaração da área de transferência, localiza o nome da classe, encontra todos os membros e seus tipos, gera construtor e copia tudo de volta para a área de transferência.
Estamos fazendo isso com calouros na minha prática de "Programação-I" (Universidade Charles, Praga) e a maioria dos alunos faz isso até o final da hora.
Se você quiser ver o código fonte, me avise.
fonte