Terminé con algo así como el siguiente código en un proyecto en el que estoy trabajando. Pensé que era realmente extraño que me permitieran hacerlo, pero ahora estoy empezando a preguntarme qué es lo que probablemente sea un truco arquitectónico de mi parte que me condujo a esto.Físicamente extraño polimorfismo de la interfaz con la composición de la interfaz
Mis preguntas para usted son:
- ¿Qué es exactamente se llama esto?
- ¿Cuáles son algunos usos del mundo real de esto?
- ¿Por qué alguien querría hacer esto?
Aquí están mis Interfaces:
namespace ThisAndThat
{
public interface ICanDoThis
{
string Do();
}
public interface ICanDoThat
{
string Do();
}
public interface ICanDoThisAndThat : ICanDoThis, ICanDoThat
{
new string Do();
}
}
Ésta es mi clase concreta:
namespace ThisAndThat
{
public class CanDoThisAndThat : ICanDoThisAndThat
{
public string Do()
{
return "I Can Do This And That!";
}
string ICanDoThis.Do()
{
return "I Can Do This!";
}
string ICanDoThat.Do()
{
return "I Can Do That!";
}
}
}
Y mi superado los ensayos:
using Xunit;
namespace ThisAndThat.Tests
{
public class ThisAndThatTests
{
[Fact]
public void I_Can_Do_This_And_That()
{
ICanDoThisAndThat sut = new CanDoThisAndThat();
Assert.Equal("I Can Do This And That!", sut.Do());
}
[Fact]
public void I_Can_Do_This()
{
ICanDoThis sut = new CanDoThisAndThat();
Assert.Equal("I Can Do This!", sut.Do());
}
[Fact]
public void I_Can_Do_That()
{
ICanDoThat sut = new CanDoThisAndThat();
Assert.Equal("I Can Do That!", sut.Do());
}
}
}
Gracias, que le da la respuesta, porque ya ha proporcionado el nombre exacto de la lo que está pasando. –
Downvoted ya que tiene muchos errores en su respuesta. Primero, la clase 'CanDoThisAndThat' implementa TRES interfaces, no dos. 'ICanDothisAndThat' establece que, cuando se implemente, también debe implementar las otras dos interfaces. Además, SyncRoot no está explícitamente definido por implementaciones para ocultarlo y desalentar el uso, se hace generalmente para mantener fuera del sitio a los miembros que rara vez se usan, o si el hecho de que se implemente una interfaz no debe importar. Mire http://msdn.microsoft.com/en-us/library/system.collections.icollection.syncroot.aspx y http://msdn.microsoft.com/en-us/library/bb356596.aspx. – Andy
En ningún lugar de esa documentación dice que no debe usar SyncLock, ni está marcado como Obsoleto, que es lo que realmente se hace cuando algo ya no se debe usar. – Andy