Tôi đã kết thúc với một cái gì đó giống như mã sau trong một dự án tôi đang làm việc trên. Tôi nghĩ thật kỳ lạ khi tôi được phép làm điều đó, nhưng bây giờ tôi bắt đầu tự hỏi điều gì có thể là một kiến trúc sư trên phần của tôi đã dẫn tôi đến điều này.Tính đa hình giao diện kỳ lạ bằng cách sử dụng thành phần giao diện
Câu hỏi của tôi cho bạn là:
- gì chính xác là điều này được gọi là?
- Một số công dụng thực tế của việc này là gì?
- Tại sao mọi người lại muốn làm điều này?
Dưới đây là giao diện của tôi:
namespace ThisAndThat
{
public interface ICanDoThis
{
string Do();
}
public interface ICanDoThat
{
string Do();
}
public interface ICanDoThisAndThat : ICanDoThis, ICanDoThat
{
new string Do();
}
}
Đây là lớp bê tông của tôi:
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!";
}
}
}
Và qua tôi kiểm tra:
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());
}
}
}
Cảm ơn, cho bạn câu trả lời vì bạn đã cung cấp tên chính xác của những gì đang diễn ra. –
Được giảm hạng khi bạn gặp nhiều lỗi trong câu trả lời. Đầu tiên, lớp 'CanDoThisAndThat' thực hiện BA giao diện, chứ không phải hai giao diện. 'ICanDothisAndThat' nói rằng, khi được triển khai, bạn cũng phải thực hiện hai giao diện khác. Đồng thời, SyncRoot không được xác định rõ ràng bằng cách thực hiện để ẩn nó để ngăn cản việc sử dụng, nó được thực hiện thường để giữ cho các thành viên ít được sử dụng ra khỏi trang web, hoặc nếu thực tế là một giao diện được thực hiện sholdn't vấn đề. Xem http://msdn.microsoft.com/en-us/library/system.collections.icollection.syncroot.aspx và http://msdn.microsoft.com/en-us/library/bb356596.aspx. – Andy
Không có nơi nào trong tài liệu đó nói rằng bạn không nên sử dụng SyncLock, cũng không được đánh dấu là lỗi thời, đó là những gì thực sự thực hiện khi một cái gì đó không còn được sử dụng. – Andy