Olá, Felipe!
Não sei se entendi direito, sua dúvida, mas vamos lá.
Para sua ideia funcionar, as propriedades deveriam ser públicas:
public class Conta
{
public string Numero { get; set; }
public string Agencia { get; set; }
public string Nome { get; set; }
public Conta(string nome)
{
this.Nome = nome;
}
}
E então você poderia usar a sintaxe abaixo:
Conta conta = new Conta("fulano de tal")
{
Agencia = "111",
Numero = "123456-7"
};
O que nada mais é do que um "açúcar sintático" (syntax sugar), isto é, uma maneira conveniente de escrever o código abaixo:
Conta conta = new Conta("fulano de tal");
conta.Agencia = "111";
conta.Numero = "123456-7";
Mas não sei o que você quer dizer com "eu não poderia deixar o parametro Nome, como hardcode". Sobre o objeto Conta
do exemplo, eu acho recomendável que os 3 parâmetros sejam incluídos no construtor, e sejam testados por validações (exemplo: nome, agência e número não podem ser nulos nem vazios. Agencia
deve ter um certo número de caracteres e Numero
deve ter um formato válido). Se esses requisitos não forem satisfeitos, você lança uma exceção de parâmetro inválido (InvalidArgumentException) impedindo o instanciamento do objeto. Caso contrário, você pode acabar tendo objetos Conta
inválidos. A não ser que haja um bom motivo para não conter validações, como por exemplo, se a classe conta for um DTO (Data Transfer Object).