у меня есть и интерфейс следующим образом:Временного решения заставить частный модификатор доступа на реализованном интерфейс собственности
public interface IData
{
String Name { get; set; }
}
А 2 класса, который реализует его:
public class Data1 : IData
{
public String Name { get; set; }
}
public class Data2 : IData
{
public String Name { get; set; }
}
мне нужно, чтобы предотвратить получение Имени a Data2
экземпляр. Компилятор не разрешает следующие формы:
internal String Name { get; set; }
private String Name { get; set; }
public String Name { private get; set; }
Я понимаю логическую причину, по которой это явно не представляется возможным. Доступ к свойствам будет осуществляться с помощью интерфейса, который не имеет понятия о реализованных модификаторах доступа и не сработает, если он не сможет его найти.
Мой случай использования является то, что оба Data1
и Data2
экземпляры должны иметь возможность использовать методы, где IData
параметр используется (некоторые из способов, в которых нет использование Name
не существует), но Data2
чувствительна и не должны быть доступны непосредственно. Поэтому я ищу обходной путь.
Вы можете явно реализовать интерфейс, а это означает, что вы не можете получить доступ к элементу интерфейса с помощью экземпляров 'Data2' (вы должны указывать на' IData'), но поскольку интерфейсы являются контрактами, все методы на них должны быть общедоступными, когда они реализуются в классе. Вы не можете использовать модификаторы доступа при явной реализации, но приведение к типу интерфейса делает их доступными (как если бы они были общедоступными) – Charleh