Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 18.05.2015
Сообщений: 30
1

Спрятать метод интерфейса

30.03.2016, 21:41. Показов 980. Ответов 4
Метки нет (Все метки)

Ребята. Реализую интерфейс, в котором определён метод volume(объём). Хочу, чтобы этот метод был не доступен вне этого класса. Реализую его через имя интерфейса, но у меня есть ещё метод Show(), в котором я хочу использовать этот метод volume(). Подскажите, как создать ссылку на интерфейс и чтобы через неё обращаться к методу volume()?IFigur fig если создавать так, то говорит, что ссылка пустая.
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
enum Figur { Пирамида, Сфера}
public interface IFigure
    {
          double volume();
          void Show();
    }
    class Pyramids : IFigure
    {
        int weight;
        int height;
        int length;
 
        public Pyramids(int w, int l, int h)
        {
            weight = w;
            length = l;
            height = h;
        }
 
        public double volume()
        {
            return 1 / 3.0 * weight  * length * height;
        }
        public void Show()
        {
            Console.WriteLine("{0} имеет длину {1}, ширину {2}, высоту {3}. Объём данной фигуры равен {4:#.##}", Figur.Пирамида.ToString(), length, weight, height, volume());
        }
    }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.03.2016, 21:41
Ответы с готовыми решениями:

Метод с generic параметром, реализующий метод интерфейса
Здравствуйте, подскажите почему ругается компилятор, что метод Add интерфейса IElementSystem не...

Как сделать что бы метод выполнялся не в потоке интерфейса
Всем привет. Появился такой вопрос "Как сделать что бы метод выполнялся не в потоке интерфейса...

Как добиться неоднозначности интерфейса что бы компилятор не мог понять какой метод вызывать?
Как добиться неоднозначности интерфейса что бы компилятор не мог понять какой метод вызывать?...

Спрятать часть интерфейса класса
Добрый вечер, как предоставить возможность только классу Initer создавать и инициализировать...

4
37 / 37 / 52
Регистрация: 03.02.2016
Сообщений: 99
30.03.2016, 21:59 2
Вы хотите чтобы метод был только интерфейсу доступен? Если я правильно понял, то так не может быть в принципе! А класс, унаследовавший интерфейс, тоже его не может сделать кроме как public его, есть вариант просто этот метод в классе пирамиды организовать, private. и тогда в
C#
1
2
3
4
5
 static void Main(string[] args)
        {
            Pyramids p = new Pyramids(3,2,6);
            p.Show();
        }
сделать, так. И при этом убрать из интерфейса.

Собственно ссылка на интерфейс
C#
1
2
3
4
5
6
Pyramids p = new Pyramids(3,2,6);
   // Создадим ссылку на интерфейс
IFigure obj;
//Используем ссылку на объект p
  obj = p;
   obj.show();
0
0 / 0 / 0
Регистрация: 18.05.2015
Сообщений: 30
30.03.2016, 22:20  [ТС] 3
В классе Pyramids в методе Show() хочу использовать метод volume(). Но метод volume() должен быть недоступен вне этого класса. IFigure.volume() вот так если определить метод, как мне обратиться к нему в методе show()?

Добавлено через 12 минут
Спасибо, разобрался сам. В методе Show() объявил ссылку на интерфейс IFigure fig = this. Через fig обратился к методу volume()
0
141 / 117 / 26
Регистрация: 07.12.2014
Сообщений: 371
31.03.2016, 09:00 4
Цитата Сообщение от denprised Посмотреть сообщение
Реализую интерфейс, в котором определён метод volume(объём). Хочу, чтобы этот метод был не доступен вне этого класса.
Вот в этом весь корень Вашей ошибки. Вы не понимаете назначение интерфейса. Интерфейс это то, с чем работают из-вне. Нельзя делать методы интерфейса закрытыми. И вообще фигура никак не укладывается в понятие интерфейса. Интерфейс определяет поведение объекта. В Вашем же случае фигура должна быть абстрактным классом, в котором будет абстрактный protected метод volume. Вот и всё

P.S. Вообще если углубляться то тогда уж 3DFigure, т.к. фигура может быть и 2ух мерной, а у неё по определению нет объема
0
0 / 0 / 0
Регистрация: 18.05.2015
Сообщений: 30
31.03.2016, 09:21  [ТС] 5
Вы меня просто не поняли. Я хотел, чтобы метод volume был закрытым вне класса Pyramids, поэтому я этот метод определил через имя интерфейса IFigure.volume(). А к этому методу я хотел обращаться только в методе Show(). Вот и всё. Спасибо за ответ, можете дать хороший источник, где подробно разбирается вопрос между выбором absract и interface?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.03.2016, 09:21

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Не работает метод интерфейса callback
у меня есть "чат",например 2 пользователя конектяться и становятся онлайн, 2-ой пользователь хочет...

Не получается перегрузить метод compareTo интерфейса Comparable
Добрый вечер, учу Java. Сделал по аналоигии из книги, и из инета. Ругается на строку public int...

Как реализовать метод интерфейса внутри потока?
Итак, создаю класс: public class ArrayIsFull extends Exception{ private int size; public...

Переопределить метод интерфейса Comparable для подкласса
Медленными шагами развиваюсь по книге Хорстмана и Корнелла, наткнулся на такую проблему: У меня...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.