C#   Уроки программирования с нуля. Си-шарп для чайников   C#

Здравствуйте, гость!
Вход
Регистрация


Свойства в Си-шарп. Аксессоры get и set. Автоматические свойства
В этом уроке мы продолжим рассматривать члены классов, и на очереди у нас свойства.

Свойство в Си-шарп – это член класса, который предоставляет удобный механизм доступа к полю класса (чтение поля и запись). Свойство представляет собой что-то среднее между полем и методом класса. При использовании свойства, мы обращаемся к нему, как к полю класса, но на самом деле компилятор преобразовывает это обращение к вызову соответствующего неявного метода. Такой метод называется аксессор (accessor). Существует два таких метода: get (для получения данных) и set (для записи). Объявление простого свойства имеет следующую структуру:

[модификатор доступа] [тип] [имя_свойства]
{
   get
   {
     // тело аксессора для чтения из поля
   }

   set
   {
     // тело аксессора для записи в поле
   }
}

Приведу пример использования свойств. Имеется класс Студент, и в нем есть закрытое поле курс, которое не может быть ниже единицы и больше пяти. Для управления доступом к этому полю будет использовано свойство Year:

class Student
{
   private int year; //объявление закрытого поля

   public int Year //объявление свойства
   {
     get // аксессор чтения поля
     {
       return year;
     }
     set // аксессор записи в поле
     {
       if (value < 1)
         year = 1;
       else if (value > 5)
         year = 5;
       else year = value;
     }
   }
}
class Program
{
   static void Main(string[] args)
   {
     Student st1 = new Student();
     st1.Year = 0; // записываем в поле, используя аксессор set     Console.WriteLine(st1.Year); // читаем поле, используя аксессор get, выведет 1
     Console.ReadKey();
   }
}

Проще говоря, в свойстве реализуются два метода. В теле аксессора get может быть более сложная логика доступа, но в итоге должно возвращаться значение поля, либо другое значение с помощью оператора return. В аксессоре set же присутствует неявный параметр value, который содержит значение, присваиваемое свойству (в примере выше, при записи, значение value равно «0»).

Зачем это нужно?

Если, например, мы бы просто сделали поле year открытым и не использовали ни методы, ни свойство для доступа, мы могли бы записать в это поле любое значение, в том числе и некорректное, а так мы можем контролировать чтение и запись.

Для контроля доступа мы могли бы здесь использовать простые методы, но для этого нам бы пришлось реализовать два отдельных метода, с разными именами, и при обращении к ним необходимо использовать скобки, что добавляет лишние неудобства. Вот как бы выглядела та же программа с использованием методов (на практике используйте свойства):

class Student
{
   private int year;

   public int GetYear()
   {
     return year;
   }
   public void SetYear(int value)
   {
     if (value < 1)
         year = 1;
     else if (value > 5)
         year = 5;
     else year = value;
   }
}
class Program
{
   static void Main(string[] args)
   {
     Student st1 = new Student();
     st1.SetYear(0);
     Console.WriteLine(st1.GetYear());
     Console.ReadKey();
   }
}

Свойство также может предоставлять доступ только на чтение поля или только на запись. Если, например, нам необходимо закрыть доступ на запись, мы просто не указываем аксессор set. Пример:

class Student
{
   private int year;

   public Student(int y) // конструктор
   {
     year = y;
   }

   public int Year
   {
     get
     {
       return year;
     }
   }
}
class Program
{
   static void Main(string[] args)
   {
     Student st1 = new Student(2);

     Console.WriteLine(st1.Year); // чтение
     st1.Year = 5; // ошибка, свойство только на чтение
     Console.ReadKey();
   }
}

Стоит помнить, что само свойство не определяет место в памяти для хранения поля, и, соответственно, необходимо отдельно объявить поле, доступом к которому будет управлять свойство.

Автоматические свойства

Автоматическое свойство – это очень простое свойство, которое, в отличии от обычного свойства, уже определяет место в памяти (создает неявное поле), но при этом не позволяет создавать логику доступа. Структура объявления Автоматического свойства:

[модификатор доступа] [тип] [имя_свойства] { get; set; }

У таких свойств, у их аксессоров отсутствует тело. Пример использования:

class Student
{
   public int Year { get; set; }
}
class Program
{
   static void Main(string[] args)
   {
     Student st1 = new Student();

     st1.Year = 0;
     Console.WriteLine(st1.Year);
     Console.ReadKey();
   }
}

Автоматически реализуемые свойства есть смысл использовать тогда, когда нет необходимости накладывать какие-либо ограничения на возможные значения неявного поля свойства.

И тут у вас может возникнуть вопрос, а в чем тогда разница между простыми открытыми полями и автоматическими свойствами. У таких свойств остается возможность делать их только на чтение или только на запись. Для этого уже используется модификатор доступа private перед именем аксессора:

public int Year { private get; set; } // свойство только на запись
public int Year { get; private set; } // свойство только на чтение


Домашнее задание

Создайте класс Телевизор, объявите в нем поле громкость звука, для доступа к этому полю реализуйте свойство. Громкость может быть в диапазоне от 0 до 100.

PS. Не забудьте поделиться с друзьями этой статьей с помощью кнопок социальных сетей.
Понравилась статья? Подпишись на рассылку и узнавай первым о новых уроках по почте!


Поделиться с друзьями:
12 июл 2013 01:27
pegorcag 16 янв 2017 20:45
Простейшая система заработка от Ольги Арининой

С запуска одной системы вы будете получать доход 2800 рублей в день.
Запустите 2 системы и ваш доход - 5600 руб в день!

Все подробности у нас на сайте. >> www.robot.zarplatt.ru <<

Ваш первый доход вы гарантированно получите
в течение 24 часов после запуска системы!

qarinacag 16 янв 2017 11:03
Предлагаю Вам возможность работы в интернете, выбирайте самостоятельно более чем из тридцати проверенных вариантов заработка наиболее удобный и близкий для Вас.
Более подробная информация у нас на сайте. >> www.zarplatt.ru <<

pegorcag 16 янв 2017 00:13
Требуются работники. Обработка зказов на дому.

Без вложений, на системе автоматического приёма и обработки заказов.

Оформление здесь >> obrabotka.zarplatt.ru <<

qegorcag 12 янв 2017 22:52
Ведущая компания в России и странах СНГ по продаже авиабилетов «Airline-online»

Крупнейшая международная компания по продаже А/В билетов
срочно набирает сотрудников на постоянную основу для несложной
работы через интернет, с ежедневными выплатами до 11 000 руб.

Работая в нашей компании Вы получаете:

- Соблюдение трудового кодекса
- Полный соцпакет, оплачиваемый отпуск, больничный, санаторий.
- Каждый наш сотрудник на дому гарантированно получает высокий доход. руб. в день.
- Гарантированные стабильные выплаты заработанных денег.
- Выплаты происходят ежедневно на банковские карты или электронные кошельки.

Пройдите регистрацию у нас на сайте. > airline.zarplatt(точка)ru <

Без вложений, опыт и профессиональные навыки не требуются!

tpavelcag 12 янв 2017 19:52
Наш сервис предоставляет настоящие лайки на фотографии заказчиков, которые готовы платить за качество.

Именно для этого мы и набираем удалённых сотрудников, которые будут выполнять работу, то есть ставить лайки и получить за это деньги.

Чтобы стать нашим удалённым сотрудником и начать ставить лайки, зарабатывая при этом 45 рублей за 1 поставленный лайк,

достаточно просто зарегистрироваться на нашем сервисе. > www.like.zarplatt.ru <

legorcag 12 янв 2017 18:12
Теперь Ваш новый график работы будет выглядеть так -
В день вы будете заняты всего 60 минут - остальное время посвящайте себе и своим близким!

Мы гарантируем:
- Первые деньги на вашей карте уже сегодня.
- Обучение. Поддержка учеников пн-птн с 10-18 мск.
- Куратор, который скоординирует ваше обучение.
- Никаких сложных схем!
- Работаете дома, по своему графику.

Все подробности на нашем сайте. ( stabilno.zarplatt.ru )

negorcag 11 янв 2017 19:53
Стабильная работа с обучением, зарплата высокая!

Вы работаете дома! Полностью честно и прозрачно;
Доступно для всех - неважно кто вы и какой у вас опыт работы в интернете!
Вы будете зарабатывать: свыше четырёх тысяч рублей в день!
Сложность: Несложно!
Оплата: - уже на следующий деньги у вас на счету!

Ознакомтесь с условиями на нашем сайте. > realno.zarplatt.ru <

tpavelcag 09 янв 2017 21:23
Наш сервис предоставляет настоящие лайки на фотографии заказчиков, которые готовы платить за качество.

Именно для этого мы и набираем удалённых сотрудников, которые будут выполнять работу, то есть ставить лайки и получить за это деньги.

Чтобы стать нашим удалённым сотрудником и начать ставить лайки, зарабатывая при этом 45 рублей за 1 поставленный лайк,

достаточно просто зарегистрироваться на нашем сервисе. > www.like.zarplatt.ru <

Святослав 26 дек 2016 13:50

class TVset
{
private double volume;

public double Volume
{
get { return volume; }
set { volume = value; }
}
public void GetVolume()
{
Console.WriteLine("Введите громкость звука\n");
while (true)
{
try
{
Volume = Convert.ToInt32(Console.ReadLine());
}
catch (FormatException)
{
Console.WriteLine("Ошибка: Введите число\n");
}
if (Volume < 0)
{
Volume = 0;
break;
}
else if (Volume > 100)
{
Volume = 100;
break;
}

}
Console.WriteLine("Громкость звука установлена на значение " + Volume);
}
}
class Program
{
static void Main(string[]args)
{
TVset myTV = new TVset();
myTV.GetVolume();
Console.ReadLine();
}
}

Valeriy 04 ноя 2016 15:58

class TV
{
private int volumeSound;

public int Volume //объявление свойства
{
get //чтение поля
{
return volumeSound;
}
set //запись в поле
{
if (value < 0) volumeSound = 0;
else if (value > 100) volumeSound = 100;
else volumeSound = value;
}
}
}

class Program
{
static void Main(string[] args)
{
TV tv1 = new TV();

byte Select;
bool offTV = false; //значение "выключение телевизора" = false

while(offTV == false) //пока телевизор не выключен, цикл будет работать
{
Console.Clear(); //очистка консоли
Console.WriteLine("Введите 1, чтобы увеличить звук > +5 dB\nВведите 2, чтобы уменьшить звук > -5 dB\nВведите 3, чтобы выключить телевизор > ");
Console.WriteLine("\nТекущий Уровень звука : {0}", tv1.Volume);

if (!byte.TryParse(Console.ReadLine(), out Select)) //обработчик ошибок (ввели не цифру а букву, например)
{
Console.WriteLine("Недопустимый ввод");
continue;
}

switch (Select)
{
case 1: tv1.Volume += 5;
break;
case 2: tv1.Volume -= 5;
break;
case 3: offTV = true;
break;
default: Console.WriteLine("Возможные варианты 1-3");
break;
}
}

}
}

Юрец 08 окт 2016 14:09

namespace GetSetTV
{

class TV
{
private int sound;

public int Sound// свойство
{
get { return sound; }// свойство вывода
set// свойство записи с проверкой
{
if (value > 0 && value < 100)
sound = value;
else
Console.WriteLine("Уровень звука должен быть в интервале от 0 до 100");
}
}

}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Укажите уровень звука");// вводим уровень звука
int ss = Int32.Parse(Console.ReadLine());// записываем значение в переменную
TV soundSet = new TV();// создаем экземпляр класса
soundSet.Sound = ss;// записываем значение с поле класса

if (soundSet.Sound!=0)
Console.WriteLine("Уровень звука {0}", soundSet.Sound);


Console.ReadKey();

}
}
}

Steyrix 06 июн 2016 10:57

class television
{
private sbyte volume;
public sbyte volumeaccess
{
get
{
return volume;
}
set
{
if (value > 100)
volume = 100;

else if (value < 0)
volume = 0;

else volume = value;
}

}

}
class Program
{
static void Main(string[] args)
{
television mytv = new television();

while (true)
{
Console.WriteLine("Установите громкость звука (от 0 до 100): ");
try
{
mytv.volumeaccess = Convert.ToSByte(Console.ReadLine());
}
catch (Exception)
{
Console.WriteLine("Введите корректное значение громкости!");
continue;
}
finally
{
Console.WriteLine("Громкость = " + mytv.volumeaccess);

}
if (mytv.volumeaccess >= 0 && mytv.volumeaccess <= 100)
break;
}
Console.ReadKey();

}

Александр Михалев 04 апр 2016 21:31

class TV
{
private int volume; // переменная громкость
public int Volume // свойство
{
get
{
return volume;
}
set
{
if (value < 0)
volume = 0;
else if (value > 100)
volume = 100;
else volume = value;
}
}
}
class Program
{
static void Main(string[] args)
{
int vol;
TV newVolume = new TV();
Console.WriteLine("Введите желаемую громкость (от 0 до 100)");
vol = Convert.ToInt32(Console.ReadLine());
newVolume.Volume = vol;
Console.WriteLine("Текущая громкость: " + newVolume.Volume + "% из 100%");
Console.ReadKey();
}
}

voloshyn-i 15 фев 2016 00:52
class TVset
{
private int vol;
public int Volume
{
get // аксессор чтения поля
{
return vol;
}
set // аксессор записи в поле
{
if (value < 0)
vol = 0;
else if (value > 100)
vol = 100;
else vol = value;
}
}
}
class Program
{
static void Main(string[] args)
{
TVset volum = new TVset();

volum.Volume = 20;
Console.WriteLine(volum.Volume);
Console.ReadKey();
}
}

neronovs 06 янв 2016 02:21

class TV
{
private int vol=1; //объявление закрытого поля

public int Vol //объявление свойства
{
get // аксессор чтения поля
{
return vol;
}
set // аксессор записи в поле
{
if (value < 1)
{
vol = 1;
}
else if (value > 100)
{
vol = 100;
}
else
{
vol = value;
}
}
}
}

class Program
{
static void Main(string[] args)
{
TV vol1 = new TV();
for (;;)
{
Console.WriteLine("The current volume is " + vol1.Vol + ". Enter the volume [1-100]");
vol1.Vol = Convert.ToInt32(Console.ReadLine());
}
}
}

ROOT 18 авг 2015 00:17
//Домашнее задание//

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication35
{
class TV
{
private int volume;
public int Volume
{
get
{
return volume;
}
set
{
if (value < 0)
volume = 0;
else if (value > 100)
volume = 0;
else
volume = value;
}
}
}
class Program
{
static void Main(string[] args)
{
//Создайте класс Телевизор, объявите в нем поле громкость звука, для доступа к этому полю реализуйте свойство.
//Громкость может быть в диапазоне от 0 до 100.
TV MyTV = new TV();
Console.WriteLine("Введите громкость звука:");
int volumechoose = Convert.ToInt32(Console.ReadLine());
MyTV.Volume = volumechoose;
Console.WriteLine("Громкость звука = " + MyTV.Volume);
Console.ReadKey();
}
}
}

Александр 10 авг 2015 16:08

namespace ConsoleApplication21_Sharp_Class_3_GETSE
{
class Program
{
static void Main(string[] args)
{
TV myTV = new TV();
int N;
t:
Console.Write("Введите громкость: ");
try
{
N = Convert.ToInt32(Console.ReadLine());
}
catch(FormatException)
{
Console.Write("Введено не верное значение!");
Console.ReadKey();
Console.Clear();
goto t;
}
myTV.volume = N;
Console.WriteLine("Громкость = {0}", myTV.volume);
Console.ReadKey();
}
}
class TV
{
public int volume_value;

public int volume
{
get
{
return volume_value;
}
set
{
if (value > 0 && value <= 100)
volume_value = value;
else
volume_value = 50;
}
}
}
}

Очень Юра 17 июл 2015 22:45
Спасибо за урок.

namespace ConsoleApplication1
{
class TV
{
private sbyte volume;

public sbyte Volume
{
get
{
return volume;
}
set
{
if (value < 0)
volume = 0;
else if (value > 100)
volume = 100;
else volume = value;
}
}
}
class Program
{
static void Main(string[] args)
{
TV tv1 = new TV();
ConsoleKeyInfo cki;
do
{
Console.Clear();
Console.Write("Громкость: {0}\n--------------\n+ прибавить\n- убавить\nesc выйти", tv1.Volume);
cki = Console.ReadKey(true);
if (cki.Key == ConsoleKey.Add)
{
tv1.Volume++;
}
else if (cki.Key == ConsoleKey.Subtract)
{
tv1.Volume--;
}
}
while (cki.Key != ConsoleKey.Escape);
}
}
}

AlPer 01 июл 2015 21:59

class TV
{
protected int TVset;

protected int volume;
public int Volume
{
get { return volume; }
set
{
if (value < 0)
value = 0;
if (value > 100)
value = 100;
volume = value;
}
}

public TV()
{
TVset = 0;
Volume = 30;
}

public void TVONorTVOFF()
{
string option;
while (TVset==0)
{
Console.Clear();
Console.WriteLine("Телевизор выключен. (вкл/выкл - наберите on/off)");
option = Console.ReadLine();
//if (option == "off") continue;
if (option == "on") TVset = 1;
}
while (TVset == 1)
{
int temp;
Console.Clear();
Console.WriteLine("Телевизор включен. (вкл/выкл - наберите on/off)");
Console.WriteLine("Громкость телевизора: {0}",Volume);
Console.WriteLine("Для регулирования громкости исп. клавиши - и +");
option = Console.ReadLine();
if (Int32.TryParse(option, out temp))
{
Volume = temp;
continue;
}
switch (option)
{
case "off":
TVset = 0; break;
case "-":
Volume--; break;
case "+":
Volume++; break;
default:
break;
}
}
}
}

class Programm
{
static void Main()
{
TV tv1 = new TV();
tv1.TVONorTVOFF();
}
}

Юлия 10 июн 2015 07:15
class TV
{
private int loud;
public int Loud
{
get
{
return loud;
}
set
{
if (value < 1)
loud = 0;
else if (value > 100)
loud = 100;
else loud = value;
}
}
}
class Program
{
static void Main(string[] args)
{
TV myTV = new TV();
myTV.Loud = -100;
Console.WriteLine(myTV.Loud)
; Console.ReadKey();
}
}
}

Warguss 04 июн 2015 14:36

internal class Television
{
private int volume;


public int Volume
{
get { return volume; }

// свойство для записи
set
{
if (value < 0)
{
volume = 0;
}
else if (value > 100)
{
volume = 100;
}
else
{
volume = value;
}
}
}


// метод управлением звуком
public bool ManageSound(char ch)
{
switch (ch)
{
// добавить звук
case '+':
Volume++;
Console.Write("Громкость {0}, ", Volume);
return true;

// убавить звук
case '-':
Volume--;
Console.Write("Громкость {0}, ", Volume);
return true;

// выключит телевизор
case '*':
return false;
}

return false;
}

}

internal class Program
{
private static void Main()
{
Television tv = new Television();
char vol;

// переменная для управления циклом
bool cycle = true;

Console.WriteLine("прибавить звук: +\n" +
"Убавить звук: -\n" +
"Выключит телевизор: *\n");

// цикл для наглядного показа управлением звука
while(cycle)
{
vol = Char.Parse(Console.ReadLine());
Console.Clear();
cycle = tv.ManageSound(vol);
}

// Console.ReadKey(); здесь не нужно
}
}

Александр_Бугай 12 май 2015 10:38
class TV
{
byte volume;
public byte Volume
{
get
{
return volume;
}
set
{
if (value < 0) volume = 0;
else if (value > 100) volume = 100;
else volume = value;

}
}

}
class Program
{
static void Main(string[] args)
{
TV myTv = new TV();
myTv.Volume = Convert.ToByte(Console.ReadLine());
Console.WriteLine(myTv.Volume);
Console.ReadLine();

}
}

Temir 04 мар 2015 13:05

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class TVSet
{
private int Volume;
public int VolumeTVSet
{
get
{
return Volume;
}
set
{
if (value < 0)
Volume = 0;
else if (value > 100)
Volume = 100;
else Volume = value;
}
}
}

class TVSETVOLUME
{
public static void Main()
{
TVSet TV1 = new TVSet();
TV1.VolumeTVSet = -4;
Console.WriteLine("The current Volume is " + TV1.VolumeTVSet);
Console.WriteLine("\tEnter volume plus +, Enter volume minus -");
string c;

do
{
c = Console.ReadLine();
if (c == "+")
Console.WriteLine(++TV1.VolumeTVSet);
else if (c == "-")
Console.WriteLine(TV1.VolumeTVSet--);
else Console.WriteLine("\tEnter volume plus +, Enter volume minus -");
}
while (c != "+" || c != "-");
}
}
}


Максим 04 мар 2015 09:31
Temir
---
Нет, здесь не должно быть методов VolumePlus и VolumeMinus, зачем эти посредники, когда уже есть свойство, которое можно использовать так:
TV1.VolumeTVSet++;

Temir 04 мар 2015 05:50
Добрый день, admin!
Правильно ли я использую свойство в программе?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class TVSet
{
private int Volume;
public int VolumeTVSet
{
get
{
return Volume;
}
set
{
if (value < 0)
Volume = 0;
else if (value > 100)
Volume = 100;
else Volume = value;
}
}
public void VolumePlus()
{
if (Volume == 100)
Console.WriteLine("Max Volume is " + Volume);
else
Console.WriteLine(++Volume);
}
public void VolumeMinus()
{
if (Volume == 0)
Console.WriteLine("Min Volume is " + Volume);
else
Console.WriteLine(--Volume);
}
}
class TVSETVOLUME
{
public static void Main()
{
TVSet TV1 = new TVSet();
TV1.VolumeTVSet = 0;
Console.WriteLine("The current Volume is "+TV1.VolumeTVSet);
Console.WriteLine("\tEnter volume plus +, Enter volume minus -");
string Volume;
do
{
Volume = Console.ReadLine();
if (Volume == "+")
TV1.VolumePlus();
else if (Volume == "-")
TV1.VolumeMinus();
else Console.WriteLine("\tEnter volume plus +, Enter volume minus -");
}
while (Volume != "+" || Volume !="-");
}

}
}


Максим 25 фев 2015 19:59
AlPer
---
В контректно этом коде эти конструкторы не нужны, для целого поля VolumeLevel значение по умолчанию устанавливается 0, что приемлемо. А на счет второго вопроса, то я и сам не понимаю такого поведения, но так то, метод TVONstatus не должен принимать никаких параметров, есть же внутреннее поле VolumeLevel, его и выводите

AlPer 24 фев 2015 22:29
Взял на себя смелость немного переделать код AlexWolf. Хотел уточнить являются ли оба конструктора лишними в коде если да то почему? И еще не понимаю (искренне) почему нельзя в поле

tv1.TVONstatus(tv1.volumeLevel);

вставлять сразу ++tv1.volumeLevel или --tv1.volumeLevel. Почему на экран метод TVONstatus выводит значение за рамками свойства?


class Program
{
static void Main()
{
bool flag = true;
TV tv1 = new TV();
tv1.TVONstatus(tv1.volumeLevel);
do
{
switch (Console.ReadKey(true).Key)
{
case ConsoleKey.PageUp:
++tv1.volumeLevel;
tv1.TVONstatus(tv1.volumeLevel);
break;
case ConsoleKey.PageDown:
--tv1.volumeLevel;
tv1.TVONstatus(tv1.volumeLevel);
break;
case ConsoleKey.Escape:
flag = false; break;
}
} while (flag);
}
}

class TV
{
private int VolumeLevel;

public TV() { }

public TV(int VolumeLevel)
{
this.VolumeLevel = VolumeLevel;
}

public int volumeLevel
{
get
{
return VolumeLevel;
}
set
{
if (value < 0) { VolumeLevel = 0; }
else if (value > 100) { VolumeLevel = 100; }
else VolumeLevel = value;
}
}

public void TVONstatus(int Volume)
{
Console.Clear();
Console.WriteLine("Телевизор включен. Громкость (0-100) регулируется PgUp или PgDwn. Выход - Esc.");
Console.WriteLine("Текущий уровень громкости: {0}", Volume);
}
}
}

AlexWolf 29 янв 2015 13:56
Спасибо, все поменял. Теперь работает как надо ))


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class TV
{
private int Volume;
public int volume
{
get
{
return Volume;
}
set
{
if (value < 0) Volume = 0;
else if (value > 100) Volume = 100;
else Volume = value;
}
}

}

class Program
{
static void Main(string[] args)
{
bool i = true;
TV volumebalans = new TV();
do
{
Console.WriteLine("Для переключения громкости используйте кнопки PgUp и PgDown. Esc - выход");
switch (Console.ReadKey(true).Key)
{
case ConsoleKey.PageUp:
volumebalans.volume +=1;
break;
case ConsoleKey.PageDown:
volumebalans.volume -=1;
break;
case ConsoleKey.Escape:
i = false;
break;

}
Console.Clear();
Console.WriteLine("Громкость "+ (volumebalans.volume));
}
while (i);
}
}
}


Максим 28 янв 2015 09:49
AlexWolf
---
В методе SetVolume вы присваиваете уровень звука самому себе в первых двух случаях, а не полю Volume:


public void SetVolume(int lvl)
{
if (lvl < 0) lvl = 0; // Volume = 0
else if (lvl > 100) lvl = 100; //Volume = 100
else Volume = lvl;
}

Вообще, в методе main не должно быть переменной lvl, вы должны работать в полем Volume или с методом GetVolume

AlexWolf 27 янв 2015 16:57
Здравствуйте уважаемый admin. Помогите пожалуйста разобраться, где ошибка в коде? В принципе все работает, но если понижать звук ниже нуля или повышать выше 100, создается такое впечатление, что показатели громкости преодолевают верхний и нижний предел, хотя на экране все отображается корректно. Вот код.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class TV
{
private int Volume;
public int GetVolume()
{
return Volume;
}
public void SetVolume(int lvl)
{
if (lvl < 0) lvl = 0;
else if (lvl > 100) lvl = 100;
else Volume = lvl;
}
}

class Program
{
static void Main(string[] args)
{
bool i = true;
TV value = new TV();
int lvl = 0;
do
{
Console.WriteLine();
Console.WriteLine("Для переключения громкости используйте кнопки PgUp и PgDown. Esc - выход");
switch (Console.ReadKey(true).Key)
{
case ConsoleKey.PageUp:
value.SetVolume(lvl+=1);
break;
case ConsoleKey.PageDown:
value.SetVolume(lvl-=1);
break;
case ConsoleKey.Escape:
i = false;
break;

}
Console.Clear();
Console.WriteLine("Громкость "+ (value.GetVolume()));
}
while (i);
}
}
}

Виталий 21 янв 2015 15:01

public class Televisor
{
public Int32 volume;

public int Volume
{
get
{
return volume;
}
set
{
if (volume < 1)
{
volume = 1;
}
else if (volume > 100)
{
volume = 1;
}
}
}
}
public class Control
{
static void Main(string[] args)
{
Televisor myTV = new Televisor();
bool OffOn = true;
while (OffOn == true)
{
Console.WriteLine("Громкость: \"" + myTV.volume + "\" для регулировки громкости введите желаемую громкость ниже.");
myTV.Volume = Convert.ToInt32(Console.ReadLine());
}
}
}

Baks_85 08 янв 2015 13:16
Добрый день!
ничего особенного, просто очередная домашка :)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication2
{
class TV
{
public bool condition = true;
private int vol;

public TV ()
{
vol = 10;
}
public int Vol
{
get
{
return vol;
}
set
{
if (value <= 30 && value >= 0)
vol = value;
else
Console.WriteLine("вы пытаетесь задать громкость недопустимую для данного устройства");
}
}
public void ChangeVolset ()
{
try
{
Vol=Convert.ToInt32(Console.ReadLine());
}
catch (FormatException)
{
Console.WriteLine("вы пытаетесь ввести не цифру!");
}
}
public void VolUP ()
{
if (vol == 30)
vol = 0;
else if (vol < 30 && vol >= 0)
vol=vol+1;
}
public void VolDOWN()
{
if (vol == 0)
vol = 30;
else if (vol <= 30 && vol > 0)
vol=vol-1;
}
}
class Program
{
static void Main(string[] args)
{
TV tvvol = new TV();
Console.WriteLine("Здравствуй пользователь! \r\nдля того, что-бы сделать по громче, набери команду \"up\" \r\nдля того, что-бы сделать по тише, набери команду \"down\"\r\nдля выбора произвольного уровня громкости в диапазоне от 0 до 30, набери команду \"any\", за тем нажми enter, введи цифру и еще раз нажми enter\r\nчто-бы выключить сие устройство, набери команду \"off\"");

while (tvvol.condition == true)
{
var temp = Convert.ToString(Console.ReadLine());
temp.ToLower();
switch (temp)
{
case "up":
tvvol.VolUP();
Console.WriteLine("громкость телевизора сейчас находится на уровне - " + tvvol.Vol + " \r\n");
break;
case "down":
tvvol.VolDOWN();
Console.WriteLine("громкость телевизора сейчас находится на уровне - " + tvvol.Vol + " \r\n");
break;
case "any":
tvvol.ChangeVolset();
Console.WriteLine("громкость телевизора сейчас находится на уровне - " + tvvol.Vol + " \r\n");
break;
case "off":
tvvol.condition = false;
Console.WriteLine("удачного дня!!!");
break;
default:
Console.WriteLine("ошибка!!! нет такой команды! повторите ввод");
break;
}
}
Console.ReadKey();
}
}
}


Максим 05 дек 2014 17:44
immortal
---
Не только дать или не дать, а и то как дать, как записать. Свойства в конечном итоге это и есть методы, только с ними удобнее работать.

immortal 05 дек 2014 15:25
Простите сразу за глупый вопрос. Но я правильно понимаю, что свойства нужны только для регулирования доступа к полям (дать/не дать чтение/запись) и все? Потому как я и get и set могу реализовать в одном методе. Или есть еще какая-нидь особенность?

Диманиак 26 ноя 2014 14:08
class TVSet
{
private sbyte volume;
public sbyte Volume
{
get
{
return volume;
}
set
{
if (value < 0)
volume = 0;
else if (value > 100)
volume = 100;
else volume = value;
}
}
}
class Program
{
static void Main(string[] args)
{
TVSet myTV = new TVSet();
Console.WriteLine("Телевизор включен с громкостью " + myTV.Volume);
Console.WriteLine("Ввведите команду (Q-выход/V-ввод громкости/+-увеличить громкость/--уменьшить громкость):");
bool Working = true;
do
{
System.ConsoleKey Key = Console.ReadKey(true).Key;
switch (Key)
{
case ConsoleKey.Q:
{
Working = false;
break;
}
case ConsoleKey.V:
{
Console.WriteLine("Введите значение громкости");
string Command = Console.ReadLine();
sbyte Volume;
if (SByte.TryParse(Command, out Volume))
{
myTV.Volume = Volume;
Console.WriteLine("Громкость установлена на " + myTV.Volume);
}
else
{
Console.WriteLine("Неверное значение!");
Console.WriteLine("Ввведите команду (Q-выход/V-ввод громкости/+-увеличить громкость/--уменьшить громкость):");
}
break;
}
case ConsoleKey.Subtract:
{
myTV.Volume -= 1;
Console.WriteLine("Громкость снижена до " + myTV.Volume);
break;
}
case ConsoleKey.Add:
{
myTV.Volume += 1;
Console.WriteLine("Громкость увеличена до " + myTV.Volume);
break;
}
}
}
while (Working);
Console.WriteLine("Телевизор выключен на громкости " + myTV.Volume);
Console.ReadKey();
}
}

Oleksandr 22 ноя 2014 12:17
class TVset
{
private int volume = 1;

public int Volume
{
get { return volume; }
set
{
if (value > 100)
volume = 100;
else if (value < 1)
volume = 1;
else volume = value;
}
}
}

static void Main(string[] args)
{

TVset tv = new TVset();
h1:
Console.WriteLine("\nChose a volume");
try { tv.Volume = Convert.ToInt32(Console.ReadLine()); }
catch (FormatException e)
{ Console.WriteLine("wrong format"); goto h1; }

Console.WriteLine("\nCurrent volume is {0}", tv.Volume);


goto h1;
}

Vox 21 ноя 2014 14:18
class TvVolume
{
private int Volume = 1;
public int volume_louder
{
get
{
Volume++;
if (Volume > 100)
Volume = 100;
return Volume;
}
}
public int volume_hush
{
get
{
Volume--;
if (Volume < 0)
Volume = 0;
return Volume;
}
}
public int volume_property
{
get
{
return Volume;
}
set
{
if (value < 0)
Volume = 0;
else if (value > 100)
Volume = 100;
else Volume = value;
}
}
}
class Program
{
static void Main(string[] args)
{
TvVolume vol = new TvVolume();
Console.WriteLine("Громкость " + vol.volume_property);
Console.WriteLine("Для повышения/понижения громкости нажмите (+/-) ");
Console.WriteLine("Для быстрого выбора громкости нажмите (v) ");
bool a = true;
while (a == true)
{
string b = Console.ReadLine();
Console.Clear();
if (b == "+")
Console.WriteLine("Громкость " + vol.volume_louder);
else if (b == "-")
Console.WriteLine("Громкость " + vol.volume_hush);
else if (b == "v")
{
try
{
Console.Write("Выберете уровень громкости: ");
vol.volume_property = Convert.ToInt32(Console.ReadLine());
Console.Clear();
Console.WriteLine("Громкость " + vol.volume_property);
}
catch (FormatException Error)
{
Console.WriteLine("Вы ввели не цифры!!!");
}
}
else
Console.WriteLine("Ошибка");
}

}
}
}

Slavik 05 окт 2014 12:31
спасибо за урок, так вышло:

class TV
{
private int sound;

public int Sound
{
get // for reading
{
return sound;
}
set // for writing
{
if (value < 0)
sound = 0;
else if (value > 100)
sound = 100;
else sound = value;
}
}
}
class Program
{
static void Main(string[] args)
{
TV tvChannel = new TV();
Console.Write("Enter volume: ");
tvChannel.Sound = int.Parse(Console.ReadLine());

Console.WriteLine("Current volume: {0}", tvChannel.Sound);
Console.ReadKey();
}
}

Максим 22 сен 2014 15:21
Firik
---
Вы пропустили else перед вторым if:

if (value < 0)
volume = 0;
else if (value > 100)
volume = 100;
else
volume = value;

Firik 21 сен 2014 15:11
Admin, почему не срабатывает свойство?

Максим 18 сен 2014 18:55
Firik
---
Проверяйте число, и если оно отрицательное - выводите соответствующее сообщение

Firik 16 сен 2014 18:13
Как убрать возможность ввода отрицательных чисел?

class TV
{
private int volume;

public int Volume
{
get
{
return volume;
}
set
{
if (value < 0)
volume = 0;
if (value > 100)
volume = 100;
else
volume = value;
}
}
}

class Program
{
static void Main(string[] args)
{
Console.WriteLine("Введите громкость");
TV MyTV = new TV();
MyTV.Volume = Convert.ToInt16(Console.ReadLine());
Console.WriteLine(MyTV.Volume);
Console.ReadKey();

}
}

Максим 19 авг 2014 17:28
Welen
---
В классе DateTime есть методы Parse и TryParse, которые служат для конвертации строки в дату:

DateTime date = DateTime.Parse("2014-08-19");

Если строка не является датой , метод Parse выбросит исключение

Welen 18 авг 2014 12:33
С простыми типами все понятно, но что делать, если в классе объект типа datetime, а данные для него читаются из строковой переменной?
Как в свойство передать строку, проверить, является ли она датой, а потом присвоить значение объекту DateTime?
(Давно, кстати, ломаю над этим голову)

Максим 01 июл 2014 15:52
zloy_proger
---
Оператор if вы как-то нелогично используете. Для проверки значения key достаточно одного оператора if-else, а не три отдельных if. В вашем случае, когда key равно 1, и первая ветка уже обработалась, key опять же будет сравниваться во втором и третьем if, что не имеет смысла. Эта часть когда должна была бы быть в стиле:
if (key == 1)
{
geometric_figure_lap new_lap1 = new geometric_figure_lap();
}
else if (key == 2)
{
geometric_figure_triangle new_triangle1 = new geometric_figure_triangle();
}
else Console.WriteLine("Вы идиот...");

Также, в таких ситуациях часто используют оператор switch

zloy_proger 01 июл 2014 13:25
в следующем уроке нет кнопки "добавить комментарий", решил выложить сюда

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace наследование
{
class geometric_figure
{
public string geometric_figure_center { get; set; }
public geometric_figure()
{
Console.WriteLine("Введите координаты центра фигуры: ");
this.geometric_figure_center = Console.ReadLine();
Console.Clear();
}
}
class geometric_figure_lap:geometric_figure
{
public geometric_figure_lap()
{
Console.WriteLine("Извените...");
Console.WriteLine("Гопники отжали циркуль.");
}
}
class geometric_figure_triangle:geometric_figure
{
public geometric_figure_triangle()
{
Console.WriteLine("Извените...");
Console.WriteLine("Мама не купила линейку.");
}
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Выберите фигуру которую хотите нарисовать: 1-куруг; 2-треугольник.");
int key = Convert.ToInt32(Console.ReadLine());
if (key == 1) { geometric_figure_lap new_lap1 = new geometric_figure_lap(); }
if (key == 2) { geometric_figure_triangle new_triangle1 = new geometric_figure_triangle(); }
if (key != 1 && key != 2) { Console.WriteLine("Вы идиот..."); }
}
}
}

zloy_proger 30 июн 2014 11:09
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace аксессоры
{
class TV
{
private int tv_channel;
public int tv_channel_switch
{
get { return (tv_channel); }
set
{
if(value<0)
{
tv_channel = 0;
}
else if(value>100)
{ tv_channel = 100; }
else { tv_channel = value; }
}
}
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Введите канал: ");
int tv_channel_number = Convert.ToInt32(Console.ReadLine());
TV newTV1 = new TV();
newTV1.tv_channel_switch = tv_channel_number;
Console.WriteLine(newTV1.tv_channel_switch);
}
}
}

Татьяна 24 июн 2014 16:55
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace урок_3
{
class Televisor
{
private int volume;

public int Volume
{
get
{
return volume;
}
set
{
if (value < 0)
volume = 0;
else
if (value > 100)
volume = 100;
else
volume = value;
}
}
}

class Program
{
static void Main(string[] args)
{
Televisor TV = new Televisor();
TV.Volume = 120;
Console.WriteLine(TV.Volume);
Console.ReadLine();
}
}
}
спасибо за полезные уроки.

denzorin 21 июн 2014 18:18
using System;



namespace helloworld
{
public class TV
{
private int volume;
public int lvlVolume
{
get
{
return volume;
}
set
{
if (value < 0)
volume = 0;
else if (value > 100)
volume = 100;
else volume = value;
}
}


}
class Program
{
static void Main(string[] args)
{
TV MyTV = new TV();
for (int i = 0; i < 101; i++)
{
Console.WriteLine("Введите уровень громкости: ");
MyTV.lvlVolume = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Текущая громкость >> "+MyTV.lvlVolume);
}
Console.ReadLine();
}
}
}

Алексей 17 июн 2014 15:27
всё прошло когда создал новый проект, но всё-равно спасибо

Максим 16 июн 2014 21:02
Алексей
---
А что если нажать на иконку запуска (зеленый треугольник). В меню Debug попробуйте нажать Build Solution и Start Debugging. Или еще может быть нужно установить StartUp Project (в Solution Explorer правой кнопкой на проект -> set as startup project)

Алексей 16 июн 2014 16:19
недавно у меня visual studio запросила регистрационный ключ, ибо прошло 22 дня. Код я ввел, потом убралось окно с ошибками и на F5 прога не реагирует, проверить не могу то, что написал. Что мне делать?

Юлия 14 июн 2014 13:09
public class TV
{
private int loud;
public int Loud
{
set {
if (value < 0)
{ loud = 0; }
else if (value > 100)
{ loud = 100; }
else loud = value;

}
get { return loud; }
}
}
class Program
{
static void Main(string[] args)
{
TV abc = new TV();
abc.Loud = Convert.ToInt32(Console.ReadLine());
Console.WriteLine(abc.Loud);
Console.ReadKey();
}
}

Максим 25 апр 2014 22:57
people
---
Какой класс? Зачем придумывать?

people 25 апр 2014 13:26
можете мне придумать класс и его объекты

XOR 23 апр 2014 10:58
Прошу прощения. Нашел bug в своем коде: если сразу ввести неправильное значение (вне установленного диапазона, то цикл заканчивается). Устраняется путём внесения двух поправок: в 12-ой строке: "101" меняем на "102", а в 36 строке "0" заменяем числом "101". (Выход из цикла происходит нажатием 101 канала) *это чтоб долго не заморачиваться :)

XOR 23 апр 2014 10:47
class Telev
{
int volume;
public int Volume
{
get
{
return volume;
}
set
{
if ((value < 101) && (value >= 0)) volume = value;
else volume = volume;
}
}
}
class Program
{
static void Main(string[] args)
{
Telev TV1 = new Telev();
do
{
Console.Clear();
Console.WriteLine("Current Volume: {0}", TV1.Volume);
Console.Write("Input Volume (1..100): ");
try
{
TV1.Volume = Convert.ToInt32(Console.ReadLine());
}
catch (Exception)
{
TV1.Volume = TV1.Volume;
}
}
while (TV1.Volume != 0);
}
}

Владимир 06 апр 2014 18:22
public class TV
{
private int Volume;
public int volume
{
get {
return Volume;
}
set
{
if (value < 0) Volume = 0;
else if (value > 100) Volume = 100;
else Volume = value;
}
}
}

Илюфер 06 фев 2014 15:16
class Televizor
{
public int volume;

public int Volume
{
get { return volume; }
set { if (value >= 0 && value <= 100) volume = value; }
}
}

class TelevizorInAction
{
static void Main()
{
Televizor newVolume = new Televizor();
newVolume.Volume = 101;
Console.WriteLine(newVolume.Volume);

Console.ReadKey();
}
}

KRECER 30 янв 2014 06:06
class TV
{
private int volume;

public int Volume
{
set { if (value > -1 && value <= 100) volume = value; }
get { return volume; }
}
}

class Program
{
static void Main(string[] args)
{
var tv = new TV();
tv.Volume = 199;
Console.WriteLine(tv.Volume);
Console.ReadKey();
}
}

Максим 27 янв 2014 17:50
palazhevich
---
Да, только имена поменять местами, свойства обычно в большой пишутся

palazhevich 27 янв 2014 03:25
class TVset
{
private int Volume;
public int volume
{
get
{
return Volume;
}
set
{
if (value < 0)
Volume = 0;
else if (value > 100)
Volume = 100;
else Volume = value;
}
}
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Enter Volume TVset from 0 to 100");
TVset TV1 = new TVset();
TV1.volume = Convert.ToSByte(Console.ReadLine());
Console.WriteLine("Volume TVset: " + TV1.volume);
Console.ReadKey();
}
}

Игорь 26 янв 2014 21:27
Огромное спасибо, все очень понятно и доступно. Долго не мог разобраться с этим вопросом)

Ilyko 20 янв 2014 11:44
Спасибо админу за уроки!

namespace lesson_15
{
class TV
{
private int speakers; //Объявление закрытого поля
public int Speak // Объявление свойства
{
get // аксессор чтения поля
{
return speakers;
}
set // аксессор записи в поле
{
if (value < 0)
speakers = 0;
else if (value > 100)
speakers = 100;
else speakers = value;
}
}
}
class Program
{
static void Main(string[] args)
{
TV tv1 = new TV();
tv1.Speak = Convert.ToInt32(Console.ReadLine()); // записываем в поле, используя аксессор set
Console.WriteLine(tv1.Speak); // читаем поле, используя аксессор get
Console.ReadKey();
}
}
}

Максим 28 ноя 2013 15:46
Dima
---
Ну да, это правильная версия. А в первом варианте я и не заметил, что не были использованы свойства)

Dima 26 ноя 2013 16:00
namespace ForMyCsharp
{
class Televizor
{
private int zvuk;
public int Zvuk
{
get
{
return zvuk;
}
set
{
if (value < 0) zvuk = 0;
else
if (value > 100) zvuk = 100;
else zvuk = value;
}
}
}
class Program
{
static void Main(string[] args)
{Televizor televizor = new Televizor();
string str = Console.ReadLine();
televizor.Zvuk = Convert.ToInt32(str);
Console.WriteLine(televizor.Zvuk);
Console.ReadKey();
}
}
}
Более правильная версия.

Максим 25 ноя 2013 21:15
Dima
---
Всё хорошо, только если вы создаете экземпляр класса Телевизор, имя должно быть соответствующим. Имя gromkost сюда никак не подходит. Как это, у громкости мы получаем звук: gromkost.GetZvuk()

Dima 23 ноя 2013 19:49
namespace proga
{
class Televizor
{
private int zvuk;
public int GetZvuk()
{
return zvuk;
}
public void setgromkost(int value)
{
if (value < 0) zvuk = 0;
else
if (value > 100) zvuk = 100;
else zvuk = value;

}
}
class Program
{
static void Main(string[] args)
{ Televizor gromkost= new Televizor();

string str=Console.ReadLine();
int yo=Convert.ToInt32(str);
gromkost.setgromkost(yo);
Console.WriteLine(gromkost.GetZvuk());

Console.ReadKey();




}
}
}

Максим 14 ноя 2013 17:56
Veribelll
---
Только так, как во втором варианте.
В первом варианте вы в один аксессор get всунули и получение значения и установку, так делать нельзя.

Veribelll 13 ноя 2013 13:14
namespace ConsoleApplication2
{
class Televizor
{
private int vol=20;
public int v
{
get
{
return (vol);
}
set
{
if (value < 0)
{
vol = 0;
}
else if (value > 100)
{
vol = 100;
}
else
{
vol = value;
}
}
}
}
class Program
{
static void Main(string[] args)
{
Televizor mytv = new Televizor();
Console.WriteLine("Введите громкость звука от 0 до 100");
for (int i = 0; i < 1; )
{
mytv.v = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Текущий звук" + " " + mytv.v);
}
}
}
}


Или так лучше?

Veribelll 13 ноя 2013 13:08
namespace ConsoleApplication2
{
class Televizor
{
private int vol=20;
public int v
{
get
{
int vod=Convert.ToInt32(Console.ReadLine());
if (vod < 0)
{
vol = 0;
}
else if (vod > 100)
{
vol = 100;
}
else
{
vol = vod;
}
return (vol);
}
}
}
class Program
{
static void Main(string[] args)
{
Televizor mytv = new Televizor();
Console.WriteLine("Введите громкость звука от 0 до 100");
for (int i = 0; i < 1; )
{
Console.WriteLine("Текущий звук" + " " + mytv.v);
}
}
}
}

biglapa 10 ноя 2013 13:51
namespace myprog
{
class TV
{
private int vol;
public int volume
{
get
{
return (vol);
}
set
{
if (value < 0)
{
vol = 0;
}
else if (value > 100)
{
vol = 100;
}
else
{
vol = value;
}
}
}
}

class Program
{
static void Main(string[] args)
{
TV TVset = new TV();
TVset.volume = Convert.ToInt32(Console.ReadLine());
Console.WriteLine(TVset.volume);
Console.ReadKey();
}
}
}

RomanS 07 ноя 2013 10:10
Спасибо большое!Учел.

Максим 29 окт 2013 21:47
RomanS
---
Если отвечать только на ваш вопрос где ошибка, то вы же сами создаете новый телевизор у которого инициализируется поле громкости нулем:
else
{
Console.WriteLine("Диапазон громкости должен быть от 0 до 100!");
TVset slevel = new TVset(); // новый телевизор, у которого звук = 0
return slevel.SoundLevel; // возвращаете 0
}

Но это только цветочки)

1. Вы создали закрытое поле и свойство, которое управляет этим полем. Но ничего кроме прямого присвоения и прямой выдачи свойство не делает, поэтому лучше бы было тогда воспользоваться автоматическим свойством:
public int? SoundLevel {get; set;} // и тогда не нужно закрытое поле.
2. Для инициализации полей объекта используйте конструктор - SoundLevel = 0; - в конструктор.
3. Но главной проблемой у вашей программы является ее структура. Есть метод изменения звука телевизора ChangeSoundLevel, но что подобный метод делает в классе Program? Где связь программа-изменеие звука? Все что относится к классу телевизор должно быть в этом же классе, а не разбросано то здесь то там. Метод ChangeSoundLevel никак не должен быть статическим, он должен обрабатывать внутренние данные конкретного объекта. И еще непонятно зачем вы создаете новый телевизор, когда введен звук выше 100. Мы работает с одним телевизором, и он должен быть только один.

Вот я внес некоторые изменеия в ваш код:
class TVset
{
public int SoundLevel { get; set; }

public TVset()
{
SoundLevel = 0;
}

public void ChangeSoundLevel()
{
Console.WriteLine("Введите требуемый уровень громкости от 0 до 100:");
try
{
int volume = Convert.ToInt32(Console.ReadLine());
if (volume >= 0 && volume <= 100)
{
SoundLevel = volume;
}
else
{
Console.WriteLine("Диапазон громкости должен быть от 0 до 100!");
}
}
catch (Exception error)
{
Console.WriteLine(error.Message);
}
}
}
class Program
{
static void Main()
{
TVset slevel = new TVset();
Console.WriteLine("Текущий уровень громкости: " + slevel.SoundLevel);
bool AnswerStatus = true;
string AnswerChange;
while (AnswerStatus)
{
Console.WriteLine("Изменить уровень звука? (да/нет)");
AnswerChange = Console.ReadLine();
switch (AnswerChange)
{
case "да":
slevel.ChangeSoundLevel();
Console.WriteLine("Текущий уровень громкости: " + slevel.SoundLevel);
break;
case "нет":
AnswerStatus = false;
break;
default:
Console.WriteLine("Необходимо ввести корректный ответ!");
break;
}
}
}
}

RomanS 29 окт 2013 10:29
Программа получилась объемной, так как хотелось объединить все накопленные знания. Ниже листинг программы и вопрос, который пока не могу сам решить!Буду благодарен, если подскажите в чем ошибка:
class TVset
{
private int? soundlevel = 0;
public int? SoundLevel
{
get
{
return soundlevel;
}
set
{
soundlevel = value;
}
}
}
class Program
{
public static int? ChangeSoundLevel()
{
Console.WriteLine("Введите требуемый уровень громкости от 0 до 100:");
try
{
int volume = Convert.ToInt32(Console.ReadLine());
if (volume >= 0 && volume <= 100)
{
return volume;
}
else
{
Console.WriteLine("Диапазон громкости должен быть от 0 до 100!");
TVset slevel = new TVset();
return slevel.SoundLevel;
}
}
catch (Exception error)
{
Console.WriteLine(error.Message);
return null;
}

}
static void Main()
{
TVset slevel = new TVset();
Console.WriteLine("Текущий уровень громкости: " + slevel.SoundLevel);
bool AnswerStatus = true;
string AnswerChange;
while (AnswerStatus)
{
Console.WriteLine("Изменить уровень звука? (да/нет)");
AnswerChange = Console.ReadLine();
switch(AnswerChange)
{
case "да":
slevel.SoundLevel = ChangeSoundLevel();
Console.WriteLine("Текущий уровень громкости: " + slevel.SoundLevel);
break;
case "нет":
AnswerStatus = false;
break;
default:
Console.WriteLine("Необходимо ввести корректный ответ!");
break;
}
}
}
}

Запускаем программу. Отвечаем да и вводим громкость скажем 3. Пока все нормально. Далее снова говорим да, но теперь вводим громкость 101 и вот тут проблема - идет вывод, что Текущая громкость снова равна 0. Почему?Ведь должно быть 3!

Максим 16 окт 2013 20:19
NikolayBelikov
---

Да, для Length объявлен только get аксессор, но это свойство не виртуальное, поэтому ничего там изменить нельзя. Используйте List, там размер динамический

NikolayBelikov 16 окт 2013 17:35
Т.е. стандартное .Length является свойством, доступным только на чтения?

Если да, то можно ли добавить в это свойство аксессор set?

hojiakbar 24 авг 2013 14:13
class TV
{
private int volume;
public int Volume
{
get
{
return volume;
}
set
{
if (value > 100)
{
volume = 100;
}
else if (value < 0)
{
volume = 0;
}
else
{
volume = value;
}
}
}
}
class Program
{
static void Main(string[] args)
{
TV obj = new TV();
Console.WriteLine("Vvedite gromkost televizora:");
obj.Volume = Convert.ToInt16(Console.ReadLine());
Console.WriteLine(obj.Volume);
Console.ReadLine();
}
}

Максим 16 авг 2013 17:26
John
---
Этот урок посвящен очень простой теме, и придумывать что-то сложное в качестве дз нет необходимости. Достаточно просто почувствовать, что такое свойства

John 16 авг 2013 15:38
Прошу заострить внимание на том факте, что решение для домашнего задания представляет собой чуть-чуть переделанный первый пример. Его (задание) следует заменить на усложненную версию.
class TVSet
{
private int volume;
public int Volume
{
get
{
return volume;
}
set
{
if (value < 1)
volume = 1;
else if (value > 100)
volume = 100;
else volume = value;
}
}
}
class Program
{
static void Main(string[] args)
{
TVSet tv = new TVSet();
Console.WriteLine("Введите громкость.");
tv.Volume = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Текущая громкость: {0}.", tv.Volume);
Console.ReadKey();
}
}


Добавить комментарий:

Имя (обязат.)
E-mail (обязат., не публикуется)


Для вставки ваших программ пользуйтесь кнопкой "исходный код"
Вёрстка сайта с нуля

Уникальный Видеокурс!

"Научись верстать сайты и заработай на этом!"

Получить видеокурс

Подпишись на курс по программированию, и узнавай первым о новых уроках!

RSS подписка Страничка Вконтакте Мы в Twitter
Бесплатный курс по основам PHP
Ошибка в тексте? Выделите ее мышкой и нажмите Ctrl+Enter
Поблагодарить автора: Номер карты (ПриватБанк)
5168 7572 4170 8660
WebMoney
R372544961915 U685637142028 Z999792764387
Наверх
Система Orphus