在實現介面的時候,VS提供了兩個菜單,一個是"實現介面",一個是"顯式實現介面",它們到底有何不一樣呢
我們來比較一下看看
1.首先假設我們有一個介面
public interface ICustomer
{
void SomeMethod();
}
2.如果是"實現介面",那麼代碼大致如下
public class Customer:ICustomer
{
#region ICustomer 成員
public void SomeMethod()
{
throw new NotImplementedException();
}
#endregion
}
3.如果是"顯式實現介面",那麼代碼大致如下
public class Customer:ICustomer
{
#region ICustomer 成員
void ICustomer.SomeMethod()
{
throw new NotImplementedException();
}
#endregion
}
大家看到差別了吧?顯式實現的方式,那些方法都會加上一個首碼的。但是,這到底意味著什麼呢?
如果是實現介面
public class DAL {
/// <summary>
/// 如果我們是直接實現介面的話,那麼既可以用介面調用方法,也可以用具體類調用方法
/// </summary>
public void GetCustomer() {
Customer customer = new Customer();
customer.SomeMethod();
}
public void GetCustomer2() {
ICustomer customer = new Customer();
customer.SomeMethod();
}
}
如果是顯式實現介面
public class DAL {
/// <summary>
/// 如果我們是顯式實現介面的話,那麼要訪問裡面的方法就只能是通過介面來調用,而不能通過具體類來做
/// </summary>
public void GetCustomer() {
ICustomer customer = new Customer();
customer.SomeMethod();
}
}
現在大部分的系統為了保證擴充性,都廣泛地使用介面。顯式實現介面,可以隱藏具體類的複雜性。