Classe vs interface

votos
2

Recentemente, fui convidado em uma entrevista que, pode uma interface ser considerado como uma classe em C #? Ou seja, é uma interface é uma classe em C #?

Eu estava confuso.

O que pode ser a resposta?

Publicado 27/08/2009 em 02:31
fonte usuário
Em outras línguas...                            


7 respostas

votos
8

Não, uma interface não é uma classe.

Uma interface é um conjunto de assinaturas de método e possivelmente propriedades que todos se relacionam com uma única idéia. Por exemplo, a interface IList terá métodos para a indexação, inserindo, e recebendo o número de elementos. No entanto, ele não define quaisquer detalhes de implementação. A interface lista poderia ser implementada como uma lista ligada, ou uma matriz embrulhado, ou qualquer coisa que você quiser, contanto que define esses métodos na interface.

Uma classe é o modelo de partida para criar um objecto real. As classes são um conjunto de assinaturas de método, além de as implementações desses métodos.

Então, não, uma interface não é uma classe, uma vez que se limita a definir um contrato específico, enquanto uma classe define todo o comportamento do objeto.

Commenter SquareCog aponta com precisão que o acima não é inteiramente verdade. Desde aulas pode ser uma subclasse, e métodos substituídas, a relação de classe para o comportamento real de um objeto fica um pouco mais complicado. Eu só vou handwave esse problema longe ao dizer que as classes são entidades individuais. Você pode ler o código-fonte de uma classe e saber o comportamento dessa classe engloba. No entanto, em tempo de execução, os objetos têm tipos em vez de classes. Tipos são toda a árvore de herança, em vez de uma classe singular, e, portanto, o comportamento de um tipo poderia ser definido ao longo de várias classes diferentes. Felizmente, isso não muda a diferença conceitual básica que as interfaces são contratos que podem implicar (através de nomes, tipos de argumentos, etc.) determinadas implementações, mas não pode impor nada, mas as assinaturas de método,

Respondeu 27/08/2009 em 02:37
fonte usuário

votos
3

A partir de uma perspectiva lógica, eles são muito semelhantes. Como conhecida por outros, um ABC 1 com apenas membros abstratos públicas serviria quase a mesma finalidade como uma interface.

Quando você chegar até as porcas e parafusos do mesmo, os dois têm uma série de diferenças importantes.

  • Uma classe só pode herdar a partir de um classes base, mas pode implementar várias interfaces.
  • Um tipo de valor, já que deriva de ValueType, não pode herdar de uma ABC, mas pode implementar uma interface.
  • Uma classe pode conter campos e membros estáticos. Uma interface não pode.
  • Uma classe pode conter implementação, uma interface não pode.
  • Uma classe pode ter membros privados e protegidos, uma interface não pode.
  • membros abstratas de um ABC são sempre virtual. Uma classe pode implementar uma interface com os membros não-virtuais.

1: Sumário Base Class

Respondeu 27/08/2009 em 02:48
fonte usuário

votos
2

A interface Java não é uma classe; é uma declaração de métodos que precisam ser implementadas por classes; uma descrição de habilidades, se você quiser. classes abstratas em Java são um ponto a meio caminho interessante entre classes próprias e interfaces, como eles definem os métodos disponíveis, mas também fornecer algumas implementações padrão.

A diferença fundamental entre uma classe abstrata e uma interface em Java é que você só pode estender uma classe; você pode implementar várias interfaces. Uma classe abstrata descreve o que você é; uma interface descreve o que você pode fazer . O que você também define o que você pode fazer - mas tem significado significativamente mais forte.

Respondeu 27/08/2009 em 02:36
fonte usuário

votos
2

Sim, qualquer classe abstrata que contém nenhuma implementação e consiste em métodos abstratos só seria equivalente a interface.

Respondeu 27/08/2009 em 02:34
fonte usuário

votos
1

Em geral, uma interface é um tipo que pode ser implementado por uma classe para indicar que a classe expõe um comportamento através de um conjunto de métodos. Por exemplo, Net tem uma ICollectioninterface que contém os métodos para interagir com uma colecção.


Em C ++, uma interface é uma classe onde cada método é abstrato.

Em Java e .Net, interfaces são tipos independentes que não estão relacionados com classes.

De qualquer forma, as classes podem implementar interfaces.

Respondeu 27/08/2009 em 02:37
fonte usuário

votos
1

Pode haver várias respostas.

Não, uma classe não é uma interface - uma interface define um contrato, uma classe é um tipo de objeto que pode ser criado.

Sim, uma interface pode ser visto como uma classe base, com apenas métodos virtuais - é assim interfaces são definidas em C ++.

Respondeu 27/08/2009 em 02:34
fonte usuário

votos
0

É útil considerar .net como tendo três tipos "seguro" de tipos em .NET: interfaces, classes e de valor tipos (há também coisas como ponteiros e tal, mas esses são outra história), e três contextos principais classes podem ser utilizados: locais de armazenamento, objetos montão, e restrições genéricas.

objetos heap pode ser de qualquer tipo, mas todos os objetos heap se comportam como objetos de classe. objetos Montão do tipo de interface são raros; eles geralmente não são criados dentro de .net, mas pode ser criado por um código projetado para trabalhar com modelos de objetos mais antigos. objetos Montão de tipos de classe conter um local de armazenamento para cada campo; objetos montão de tipos de valor conter um local de armazenamento, cujo tipo é o tipo de valor em questão.

Locais de armazenamento pode também ser de qualquer tipo, mas locais do tipo valor de armazenamento diferentes dos outros. Um local de armazenamento de tipo de classe ou de interface contém uma referência classe. Uma localização de tipo valor de armazenamento contém, quer uma primitiva (byte, número inteiro, carvão animal, o número de ponto flutuante, etc.) valor ou então contém um local de armazenamento para cada campo do tipo de valor (assim, por exemplo, um local de armazenamento de tipo Pointprende dois locais de armazenamento de tipo Int32, cada um dos quais ocupa um-32-bit inteiro assinado primitivo).

Restrições genéricos também podem ser de qualquer tipo, mas restrições de tipos de interface não confinar o parâmetro de tipo genérico constrangidos-se como sendo um tipo de classe, tipo de interface, ou tipo de valor. Um método declarado void Foo<T>(T param) where T:IWowzopoderia ser chamado com um parâmetro de tipo de classe, tipo de interface, ou tipo de valor. Se a rotina é chamada com um parâmetro de tipo de valor, em seguida, parame quaisquer outros locais de armazenamento declarados de tipo Tserá armazenado como tipos de valor. Se a rotina é chamada com um parâmetro de tipo de classe ou tipo inteiro, em seguida, parame quaisquer outros locais de armazenamento declarados de tipo Tserá armazenado como referências de classe. É importante notar que, se Té em si um tipo de interface ( IWozoou um derivado), em seguida, paramvai ser passada como uma referência a um objecto de montão, e irá comportar-se como um, independentemente do facto do tipo da instância de objecto é um objecto de classe ou tipo de valor. Se struct Barimplementos IWowzo, e myBaré uma variável do tipo Bar, chamando Foo<Bar>(myBar)podem produzir diferentes semântica da Foo<IWowzo>(myBar); No primeiro caso, o parâmetro irá comportar-se como um tipo de valor e, em último caso, ele irá se comportar como um tipo de classe.

Respondeu 09/07/2012 em 19:44
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more