Ví dụ một trường hợp với thông báo lỗi của trình biên dịch là: The modifier 'public' is not valid for this item
namespace Test.InterfaceLib
{
public class Customer : IMember
{
public string IMember.PrintName() //Error
Here...
{
return this.GetType().Name
+ " called from interface i1";
}
}
public interface IMember
{
string PrintName();
}
interface IUser
{
string PrintName();
}
}
Vậy thì tại sao các thành viên của lớp khi cài đặt explicit lại mặc định là private. Xem ví dụ sau:
namespace Test.InterfaceLib
{
interface I1 { void PrintName();
}
interface I2 { void PrintName();
}
public class Customer : I1, I2
{
void I1.PrintName()
{
Console.WriteLine("I1");
}
void I2.PrintName()
{
Console.WriteLine("I2");
}
}
}
Trường hợp 1: Gặp lỗi, không biết gọi phương thức nào
Customer c = new Customer();
c.PrintName();
Trường hợp 2: Hợp lệ khi lời gọi là tường minh
Customer c = new Customer();
(c as I1).PrintName();
Như vậy, nếu có các phương thức là public, có thể bạn gặp phải xung đột các tên với nhau (name-clash) và không thể xử lý được bằng các qui tắc quá tải thông thường (overloading).
0 comments:
Đăng nhận xét