Pergunta

Eu gostaria de ser capaz de fazer algo como a seguinte:

//non-generic
var MyTable = new Table();
string name = MyTable.Name;
IEnumerable<String> rows = MyTable.Rows;

//generic
var MyTableGeneric = new Table<MyType>();
string name = MyTableGeneric.Name;
IEnumerable<MyType> rows = MyTableGeneric .Rows;

Será que algo como isso ser muito:

http://img81.imageshack.us/img81/427/diagramcm3.jpg

ou isso seria melhor:

http://img301.imageshack.us/img301/4136/presentation1nh9.jpg

Desculpe se isso difícil de entender o que estou tentando dizer, basicamente eu tenho dois objetos irão compartilhar propriedades comman exceto para lá coleções de linhas que serão genérico. Eu gostaria de fazer isso de forma mais limpa.

Infelizmente para os meus diagramas de baixa qualidade, feitos no PowerPoint:)

Foi útil?

Solução

Eu diria que o segundo projeto é melhor. Menos itens e mais fácil caminho de herança.

O primeiro projeto tem interfaces desnecessárias, que você realmente não precisa a menos que você esteja implementando outra coisa que implementa a interface, mas não herdar da classe base.

Outras dicas

Qual é a diferença betweeen um Table e uma Table<string>? Em outras palavras, você não pode apenas usar Table<string> como sua forma nongeneric?

Se você do ir para a segunda opção, eu sugiro renomear uma das suas propriedades Rows - você pode ser capaz de fugir com ter duas propriedades de diferentes tipos através escondendo etc, mas é não vai ser agradável.

Quanto comportamento será o seu tipo Table realmente tem? Se ele é realmente apenas um recipiente, você pode não precisar de uma interface -. Mas se ele tem lógica significativa por trás disso, você pode querer ter uma interface de modo que você pode zombar a tabela ao testar uma classe que usa-lo

Gostaria de usar genéricos nas linhas, sem envolver corda na classe base, e ter a herdar não genérico da classe Table. Considerar não usando a classe abstrata.

Table<T> -> Table:Table<string>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top