Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.08.2012, 02:00   #1
vierumk
 
Регистрация: 12.08.2012
Сообщений: 9
Вопрос Объясните пару строчек в этой программе

Программа из книги Head First C#, перешел к изучению наследования классов. И здесь пример программы, и не могу разобраться со строчками когда, в голове каша от этого))

Я написал Комменты - на тех участках которые непонятны.
--Jewels.cs
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace zadanie12_virtual
{
    class Jewels
    {
        public string Sparkle()
        {
            return "Sparkle, sparkle!";
        }
    }
}
--Safe.cs
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace zadanie12_virtual
{
    class Safe
    {
        private Jewels contents = new Jewels();  //Не понятна суть иницализации обьекта в классе другом
        private string safeCombination = "12345";
        
        public Jewels Open(string combination)   //И что это за метод, где тип Класс Jewels
                                                              //Как это вообще работает? - впервые сталкиваюсь
        {
            if (combination == safeCombination)
                return contents;                        //Что тут возвращает? - пустой объект?
            else
                return null;
        }

        public void PickLock(Locksmith lockpicker) //А это что объявление объекта класса Locksmith  в 
                                                                //параметрах?
        {
            lockpicker.WriteDownCombination(safeCombination);
        }
    }
}

--Owner.cs
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace zadanie12_virtual
{
    class Owner
    {
        private Jewels returnedContents;
        public void ReceiveContents(Jewels safeContents)
        {
            returnedContents = safeContents;
            Console.WriteLine("Thank you for returning my jewels! " + safeContents.Sparkle());
        }
    }
}

--Locksmith.cs
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace zadanie12_virtual
{
    class Locksmith
    {
        public void OpenSafe(Safe safe, Owner owner)
        {
            safe.PickLock(this);
            Jewels safeContents = safe.Open(writtenDownCombination);
            ReturnContents(safeContents, owner);
        }
        private string writtenDownCombination = null;
        public void WriteDownCombination(string combination)
        {
            writtenDownCombination = combination;
        }
        public void ReturnContents(Jewels safeContents, Owner owner)
        {
            owner.ReceiveContents(safeContents);
        }
    }
}

--JewelThief.cs
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace zadanie12_virtual
{
    class JewelThief : Locksmith
    {
        private Jewels stolenJewels = null;
        public void ReturnContents(Jewels safeContents, Owner owner)
        {
            stolenJewels = safeContents;
            Console.WriteLine("I'm stealing the contents! " + stolenJewels.Sparkle());
        }
    }
}

--Program.cs
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace zadanie12_virtual
{
    class Program
    {
        static void Main(string[] args)
        {
            Owner owner = new Owner();
            Safe safe = new Safe();
            JewelThief jewelThief = new JewelThief();
            jewelThief.OpenSafe(safe, owner);
            Console.ReadKey();
        }
    }
}
В общем то основные вопросы, но из-за этого я все остальное также переварить не могу. Прошу помощи разобраться в этих вложенных классах, а также и эти вложения в параметры методов.
vierumk вне форума Ответить с цитированием
Старый 28.08.2012, 10:20   #2
Di_sol
Пользователь
 
Регистрация: 15.11.2011
Сообщений: 26
По умолчанию

Цитата:
//И что это за метод, где тип Класс Jewels
Это функция что-то типо функции безопасного показа данных.
Цитата:
//Что тут возвращает? - пустой объект?
Если введена правильная комбинация символов - функция возвращает contents - экземпляр класса Jewels. Иначе просто возвращает null.
Цитата:
//Как это вообще работает? - впервые сталкиваюсь
Будешь учиться дальше - еще не раз столкнешься

Цитата:
//А это что объявление объекта класса Locksmith в параметрах?
Это не объявление, это указание типа передаваемых данных, также как int или string.
Di_sol вне форума Ответить с цитированием
Старый 28.08.2012, 14:36   #3
vierumk
 
Регистрация: 12.08.2012
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Di_sol Посмотреть сообщение
Если введена правильная комбинация символов - функция возвращает contents - экземпляр класса Jewels. Иначе просто возвращает null.
contens - же ничего не имеет?! я понял что возвращает, но что именно будет возвращено?

Да я бы дальше рад был с таким встречаться, главное понять это, с логической точки зрения. Неужели этот код в этой программе удобный))
vierumk вне форума Ответить с цитированием
Старый 28.08.2012, 14:39   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
contens - же ничего не имеет?! я понял что возвращает, но что именно будет возвращено?
вообще то там создан объект класса Jewels.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 28.08.2012, 14:45   #5
vierumk
 
Регистрация: 12.08.2012
Сообщений: 9
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
вообще то там создан объект класса Jewels.
И при возвращении обьекта класса Jewels будет вызван его метод? А если там 5 методов? Т.е. если я не возвращаю конкретно какой-то метод обьекта, будут вызваны все public методы класса?
vierumk вне форума Ответить с цитированием
Старый 28.08.2012, 14:58   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

вы возвращаете объект, а не метод.

наподобие
Код:
int DoIt()
{
    return 5;
}
возвращается объект, который потом и используете как нужно.

только помним что объекты возвращаются по ссылке, а не по значению.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 28.08.2012 в 15:10.
Пепел Феникса вне форума Ответить с цитированием
Старый 28.08.2012, 15:29   #7
vierumk
 
Регистрация: 12.08.2012
Сообщений: 9
По умолчанию

Спасибо - пытаюсь пока разобраться как используется этот возвращенный обьект
vierumk вне форума Ответить с цитированием
Старый 28.08.2012, 15:48   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

в классе Locksmith
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
объясните пару непонятных слов. skauzer_blr Помощь студентам 1 04.05.2012 22:37
блок схема к этой программе emin313gs Помощь студентам 1 10.10.2010 17:35
Где в этой программе ошибка: Оля_1991 Помощь студентам 4 04.10.2010 12:20
поясните пару строчек в Ассемблере Pont Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 02.05.2010 20:21
описание строчек в программе в С++ Luxian Помощь студентам 0 21.10.2009 20:18