Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Доступ к методам класса / 6 сообщений из 6, страница 1 из 1
01.03.2015, 18:35
    #38891826
myaucha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к методам класса
Какие есть альтернативы следующей реализации?! Пример условный, чтобы проще было понять идею... Мне надо спрятать логику работы с полем count, чтобы при обращении к доступным членам ExtClass.Class было видно только свойство Count, а сам ExtClass имел бы доступ к элементам типа Class для изменения (я не C#-программист, поэтому возможно не вижу очевидных вещей, как это сделать проще и правильнее). То есть надо чтобы Class имел что-то типа friend-метода, который был бы доступен из ExtClass, но недоступен другим классам.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
        public static void Main()
        {
            ExtClass ecl = new ExtClass();
            ecl.Add(2.0);

            ExtClass.Class cl = ecl[2.0];
            Console.WriteLine(cl.Count);

            Console.ReadKey();
            return;   
        }




Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
   // контейнер
    class ExtClass
    {
        interface IClass
        {
            void Add();
        }

        // элемент
        public class Class : IClass
        {
            int count;
            public int Count { get { return count; } }

            void IClass.Add()
            {
                count++;
            }
        }

        Dictionary<double, Class> classes;

        // конструктор
        public ExtClass()
        {
            classes = new Dictionary<double, Class>();
            for (int i = 0; i < 10; i++) classes.Add((double)i, new Class());
        }

        // инкремент
        public void Add(double key)
        {
            ((IClass)classes[key]).Add();
        }
        
        // получить элемент
        public Class this[double key]
        {
            get { return classes[key]; }
        }
    }
...
Рейтинг: 0 / 0
01.03.2015, 18:54
    #38891835
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к методам класса
myauchaКакие есть альтернативы следующей реализации?! internal (C# Reference)

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
   // контейнер
    class ExtClass
    {
        interface IClass
        {
            int Count { get; }
        }

        // элемент
        public class Class : IClass
        {
            public int Count { get; internal set; }
        }

        Dictionary<double, Class> classes;

        // конструктор
        public ExtClass()
        {
            classes = new Dictionary<double, Class>();
            for (int i = 0; i < 10; i++) classes.Add((double)i, new Class());
        }

        // инкремент
        public void Add(double key)
        {
            var classInstance = classes[key];
            var count = classInstance.Count;

            classInstance.Count = count + 1;
        }
        
        // получить элемент
        public IClass this[double key]
        {
            get { return classes[key]; }
        }
    }
...
Рейтинг: 0 / 0
01.03.2015, 22:11
    #38891909
myaucha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к методам класса
Подправил, то в чем не видел смысла. Получил, по сути то же, что и было, только возвращается наружу теперь не класс, а интерфейс. Сути это не меняет по-моему?! В данном случае зачем нужен internal не понял

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
    // контейнер
    class ExtClass
    {
        public interface IClass
        {
            int Count { get; }
        }

        // элемент
        class Class : IClass
        {
            public int Count { get; set; }
        }

        Dictionary<double, Class> classes;

        // конструктор
        public ExtClass()
        {
            classes = new Dictionary<double, Class>();
            for (int i = 0; i < 10; i++) classes.Add((double)i, new Class());
        }

        // инкремент
        public void Add(double key)
        {
              
            Class classInstance = classes[key];
            classInstance.Count++;
        }

        // получить элемент
        public IClass this[double key]
        {
            get { return classes[key]; }
        }
    }
...
Рейтинг: 0 / 0
02.03.2015, 07:40
    #38892007
Roman Mejtes
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к методам класса
myaucha,

называть класс Class'ом, это просто отвратительно и возмутительно!

"данном случае зачем нужен internal не понял", где там internal модификатор?
чтоб понять, зачем нужен Internal попробуй существующие классы переопределять из стандартных сборок )
...
Рейтинг: 0 / 0
02.03.2015, 12:48
    #38892253
myaucha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к методам класса
Roman Mejtesmyaucha,
называть класс Class'ом, это просто отвратительно и возмутительно!Для тестового примера любое имя сгодится

Roman Mejtes"данном случае зачем нужен internal не понял", где там internal модификатор?см. код от SkyAna

Roman Mejtesчтоб понять, зачем нужен Internal попробуй существующие классы переопределять из стандартных сбороквопрос был вообще не про сборки и не о том, как вытащить интерфейс наружу DLL-ки. В рамках обычного консольного приложения могут быть классы, которые взаимодествуют друг с другом, но при это часть функционала скрывают для других.

PS: В целом, как я понял, скрытие интерфейса в классе (или же наоборот скрытие класса и выставление наружу интерфейса) - это единственный способ.
...
Рейтинг: 0 / 0
02.03.2015, 13:03
    #38892280
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Доступ к методам класса
myauchaPS: В целом, как я понял, скрытие интерфейса в классе (или же наоборот скрытие класса и выставление наружу интерфейса) - это единственный способ.Для Вашей задачи наверное да.
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Доступ к методам класса / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]