Ho finito con qualcosa di simile al seguente codice in un progetto su cui sto lavorando. Ho pensato che fosse davvero strano che mi fosse permesso farlo, ma ora sto iniziando a chiedermi che cosa è più probabile che una raffica architettonica da parte mia mi abbia portato a questo.Polimorfismo di interfaccia stranamente strano che utilizza la composizione di interfaccia
Le mie domande a voi sono:
- Che cosa esattamente si chiama?
- Quali sono alcuni usi del mondo reale di questo?
- Perché qualcuno dovrebbe voler fare questo?
Qui sono i miei Interfacce:
namespace ThisAndThat
{
public interface ICanDoThis
{
string Do();
}
public interface ICanDoThat
{
string Do();
}
public interface ICanDoThisAndThat : ICanDoThis, ICanDoThat
{
new string Do();
}
}
Ecco la mia classe 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!";
}
}
}
E la mia superato le prove:
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());
}
}
}
Grazie, ti dà la risposta, perché hai fornito il nome esatto della cosa sta succedendo. –
Downvoted come hai molti errori nella risposta. Innanzitutto, la classe 'CanDoThisAndThat' implementa TRE interfacce, non due. 'ICanDothisAndThat' afferma che, quando viene implementato, è necessario implementare anche le altre due interfacce. Inoltre, SyncRoot non è definito esplicitamente dalle implementazioni per nasconderlo per scoraggiare l'uso, fatto solitamente per tenere i membri raramente utilizzati fuori dal sito, o se il fatto che un'interfaccia sia implementata non ha importanza. Guardare http://msdn.microsoft.com/en-us/library/system.collections.icollection.syncroot.aspx e http://msdn.microsoft.com/en-us/library/bb356596.aspx. – Andy
No, in quella documentazione si dice che non dovresti usare SyncLock, né sono contrassegnati come Obsoleto, che è ciò che è veramente fatto quando qualcosa non dovrebbe più essere usato. – Andy