Поведение интерфейса и класса В C# с отражением
Привет,
Во время разработки моего проекта я наблюдал странное поведение (в соответствии с моим пониманием концепций ООП) интерфейса и класса. Ниже приведены подробности:
У меня есть класс DBOperations, который включает в себя 2 интерфейса IReadOnly и IDML.
class DBOperations : IDML,IReadOnly { public string UpdateDB() { return "Update Data"; } public string SelectData() { return "Select Data"; } }
public interface IDML { string UpdateDB(); }
public interface IReadOnly { string SelectData(); }
Идея заключается в том, что для некоторых операций я хотел бы использовать интерфейс IReadOnly и для операций CRUD, я хотел бы использовать интерфейс и idml.
В моем вызывающем классе я могу получить доступ
UpdateDBметод из интерфейса IDML из ссылки интерфейса IReadOnly !
IReadOnly objIReadOnly = new DBOperations(); IDML objIDML = new DBOperations(); Console.WriteLine(objIReadOnly.SelectData()); Console.WriteLine(objIDML.UpdateDB()); Console.WriteLine(objIReadOnly.GetType().GetMethod("UpdateDB").Invoke(objIReadOnly, null)); // Able to execute UpdateDB method Why ??
Пожалуйста, посоветуйте, как себя вести.
Заранее спасибо !
С уважением,
Дивья
Что я уже пробовал:
Нужна помощь в понимании поведения.
Sinisa Hajnal
Просто от чтения кода (не проверял):
Потому что gettype возвращает тип класса и DBOperations содержит команды updatedb.
Если вы попробуете objIReadOnly.UpdateDB он должен потерпеть неудачу, но, вызывая из экземпляра объекта, вы получаете доступ из класса, а не из интерфейса.