É possível ter duas partes (mesmo espaço para nome, mesmo nome de classe) em uma classe parcial em DLLs separadas?
É possível ter duas partes (mesmo espaço para nome, mesmo nome de classe) em uma classe parcial em DLLs separadas?
Respostas:
Do MSDN - Classes e métodos parciais :
Todas as definições de tipo parcial destinadas a serem partes do mesmo tipo devem ser definidas no mesmo assembly e no mesmo módulo (arquivo .exe ou .dll). Definições parciais não podem abranger vários módulos.
Não. Classes parciais são um recurso puramente de linguagem. Quando uma montagem é compilada, os arquivos são combinados para criar o tipo. Não é possível espalhar os arquivos em diferentes montagens.
Porém, dependendo do que você deseja fazer, você poderá usar métodos de extensão para realizar o que precisa.
Não, não é possível. Quando a montagem é compilada, a classe precisa ser concluída.
Enquanto outras respostas fornecem o desagradável "Não" que qualquer pessoa que chegue a esta página não quer ver ou ouvir, fiquei impressionado com outro pensamento que ainda não foi mencionado aqui. Se classes parciais fossem permitidas em assemblies, seria possível acessar membros particulares de tipos existentes que não foram escritos por ele, permitindo-lhe manipulá-los de maneiras que não eram pretendidas pelo autor original, comprometendo assim a funcionalidade de todas as classes herdadas também.
Além disso, essas classes em outras assembléias (e seus filhos) precisariam ser recompiladas para que funcionasse. Portanto, logicamente não é possível permitir a divisão de uma classe em diferentes montagens.
Você pode usar métodos de extensão quando desejar adicionar um método a uma classe em uma dll diferente. A única desvantagem deste método é que você não pode adicionar métodos estáticos.
A questão é por que você deseja criar uma classe parcial em outra montagem? Você pode definir classes e interfaces abstratas entre os assemblies, talvez seja necessário analisar isso.
Você provavelmente só deseja criar uma classe Wrapper dentro da sua própria biblioteca, em torno da classe na biblioteca da 3ª parte. Em seguida, adicione qualquer funcionalidade à classe de wrapper.