ich mit so etwas wie den folgenden Code in einem Projekt arbeite ich an gelandet. Ich dachte, es wäre wirklich seltsam, dass ich es tun durfte, aber jetzt beginne ich mich zu fragen, was höchstwahrscheinlich ein architektonischer Gaff ist, der mich dazu geführt hat.Freakishly seltsam Schnittstelle Polymorphismus Schnittstelle Zusammensetzung mit
Sie Meine Fragen sind:
- Was genau heißt das?
- Was sind einige reale Welt der diese verwendet?
- Warum sollte jemand das tun?
Hier sind meine Schnittstellen:
namespace ThisAndThat
{
public interface ICanDoThis
{
string Do();
}
public interface ICanDoThat
{
string Do();
}
public interface ICanDoThisAndThat : ICanDoThis, ICanDoThat
{
new string Do();
}
}
Hier ist meine konkrete Klasse:
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!";
}
}
}
Und mein Vergehen Tests:
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());
}
}
}
Danke, geben Sie die Antwort, weil Sie den genauen Namen der dargebotenen, was los ist. –
Downvoted, da Sie eine Menge Fehler in Ihrer Antwort haben. Erstens implementiert die Klasse "CanDoThisAndThat" drei Schnittstellen, nicht zwei. 'ICanDothisAndThat' besagt, dass bei der Implementierung auch die beiden anderen Schnittstellen implementiert werden müssen. Außerdem wird SyncRoot nicht explizit durch Implementierungen definiert, um es zu verstecken, um die Verwendung zu verhindern, es wird normalerweise ausgeführt, um selten verwendete Mitglieder von der Site fernzuhalten, oder wenn die Tatsache, dass eine Schnittstelle implementiert ist, keine Rolle spielt. Sehen Sie sich http://msdn.microsoft.com/en-us/library/system.collections.icollection.syncroot.aspx und http://msdn.microsoft.com/en-us/library/bb356596.aspx an. – Andy
Nein, wo in dieser Dokumentation steht, dass Sie SyncLock nicht verwenden sollten, noch sind sie als Veraltet markiert, was wirklich gemacht wird, wenn etwas nicht mehr verwendet werden sollte. – Andy