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

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


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

Абстрактные классы

Абстрактный класс – это класс объявленный с ключевым словом abstract:

abstract class [имя_класса]
{
   //тело
}

Такой класс имеет следующие особенности:
- нельзя создавать экземпляры (объекты) абстрактного класса;
- абстрактный класс может содержать как абстрактные методы/свойства, так и обычные;
- в классе наследнике должны быть реализованы все абстрактные методы и свойства, объявленные в базовом классе.

Зачем нужны абстрактные классы?

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

Абстрактные методы

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

Абстрактный метод – это метод, который не имеет своей реализации в базовом классе, и он ДОЛЖЕН быть реализован в классе-наследнике. Абстрактный метод может быть объявлен только в абстрактном классе.

Какая же разница между виртуальным и абстрактным методом?

- Виртуальный метод может иметь свою реализацию в базовом классе, абстрактный – нет (тело пустое);
- Абстрактный метод должен быть реализован в классе наследнике, виртуальный метод переопределять необязательно.

Объявление абстрактного метода происходит при помощи ключевого слова abstract, и при этом фигурные скобки опускаются, точка с запятой ставится после заголовка метода:

[модификатор доступа] abstract [тип] [имя метода] ([аргументы]);


Реализация абстрактного метода в классе наследнике происходит так же, как и переопределение метода – при помощи ключевого слова override:

[модификатор доступа] override [тип] [имя метода] ([аргументы])
{
  // реализация метода
}

Абстрактные свойства

Создание абстрактных свойств не сильно отличается от методов:

protected [тип] [поле, которым управляет свойство];
[модификатор доступа] abstract [тип] [имя свойства] { get; set; }


Реализация в классе-наследнике:

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


Пример

В качестве примера, приведу программу похожую на ту, которая была в предыдущем уроке о виртуальных методах, где выводилась информация о человеке/студенте/школьнике. Сейчас уже будут животные. Тогда мы могли создать человека без статуса (не студент, не школьник), у которого была некоторая информация, а сейчас у нас будет абстрактная сущность Животное, объект которой создавать нельзя и нет смысла, так как каждое животное будет конкретного подцарства – млекопитающее, рыба, птица:

abstract class Animal
{
   public string Name { get; set; }
   public string Type { get; protected set; }

   public abstract void GetInfo(); // объявление абстрактного метода
}
class Parrot : Animal
{
   public Parrot(string name)
   {
     Name = name;
     Type = "Птица";
   }
   public override void GetInfo() // реализация абстрактного метода
   {
     Console.WriteLine("Тип: " + Type + "\n" + "Имя: " + Name + "\n");
   }
}
class Cat : Animal
{
   public Cat(string name)
   {
     Name = name;
     Type = "Млекопитающее";
   }
   public override void GetInfo() // реализация абстрактного метода
   {
     Console.WriteLine("Тип: " + Type + "\n" + "Имя: " + Name + "\n");
   }
}
class Tuna : Animal
{
   public Tuna(string name)
   {
     Name = name;
     Type = "Рыба";
   }
   public override void GetInfo() // реализация абстрактного метода
   {
     Console.WriteLine("Тип: " + Type + "\n" + "Имя: " + Name+"\n");
   }
}
class Program
{
   static void Main(string[] args)
   {
     List<Animal> animals = new List<Animal>();
     animals.Add(new Parrot("Кеша"));
     animals.Add(new Cat("Пушок"));
     animals.Add(new Tuna("Тёма"));

     foreach (Animal animal in animals)
       animal.GetInfo();

     Console.ReadKey();
   }
}

В итоге, мы все так же работаем с одним списком животных, и, вызывая один метод GetInfo(), мы получаем информацию о соответствующем животном.

При попытке создать объект абстрактного класса мы получим ошибку "Cannot create an instance of the abstract class or interface 'ConsoleApplication1.Animal'":

Animal animal = new Animal(); // ошибка



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

Создайте абстрактный класс Человек, пусть там будет свойство Имя и абстрактный метод СказатьПриветствие(), от этого класса будет несколько наследников, которые представляют национальность (русский, украинец, американец...). Должно получиться так, что при вызове метода СказатьПриветствие() выводилось приветствие на языке соответствующему национальности (Привет, Привіт, Hi...).

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


Поделиться с друзьями:
16 ноя 2013 18:24
Avito321vom 21 окт 2017 08:11
<b>Пополение баланса Авито (Avito) за 50%</b> | <b>Телеграмм @a1garant</b>

<b>Мое почтение, дорогие друзья!</b>

Рады предоставить Всем вам сервис по пополнению баланса на действующие активные аккаунты Avito (а также, совершенно новые). Если Вам необходимы определенные балансы - пишите, будем решать. Потратить можно на турбо продажи, любые платные услуги Авито (Avito).

<b>Аккаунты не Брут. Живут долго.</b>

Процент пополнения в нашу сторону и стоимость готовых аккаунтов: <b>50% от баланса на аккаунте.</b>
Если нужен залив на ваш аккаунт, в этом случае требуются логин и пароль Вашего акка для доступа к форме оплаты, пополнения баланса.
Для постоянных заказчиков гибкая система бонусов и скидок!

<b>Гарантия: </b>

<b>И, конечно же ничто не укрепляет доверие, как - Постоплата!!!</b> Вперед денег не просим...

Рады сотрудничеству!

<b>Заливы на балансы Авито</b>
________

авито аккаунты ворлд оф танк
авито деньги омске
авито саратов кошельки
продажа аккаунтов авито
как авито блокирует аккаунты

Dol77larpa 14 окт 2017 20:02
Были заплачены деньги 6000 за покупку базы данных и просто швырнул. с другого аккаунта к нему обратились, уже специально на 100р была сделка на выборку и тоже швырнул.

непорядочный гандон. кинет 100р%

Телеграм @japoshka кидальная дешевка

Дмитрий 10 окт 2017 13:04
Я так и не понял зачем нужны абстрактные классы

Как по мне пример неудачный

Ведь с меньшей писаниной можно обойтись и без абстрактных классов


using System;
using System.Collections.Generic;

namespace Lesson_Abstract_classes
{
class Animal
{
public string Name { get; set; }
public string Type { get; protected set; }

public void GetInfo() // объявление абстрактного метода
{
Console.WriteLine("Тип: " + Type + "\n" + "Имя: " + Name + "\n");
}
}
class Parrot : Animal
{
public Parrot(string name)
{
Name = name;
Type = "Птица";
}
}
class Cat : Animal
{
public Cat(string name)
{
Name = name;
Type = "Млекопитающее";
}
}
class Tuna : Animal
{
public Tuna(string name)
{
Name = name;
Type = "Рыба";
}
}
class Program
{
static void Main(string[] args)
{
List<Animal> animals = new List<Animal>();
animals.Add(new Parrot("Кеша"));
animals.Add(new Cat("Пушок"));
animals.Add(new Tuna("Тёма"));

foreach (Animal animal in animals)
animal.GetInfo();

Console.ReadKey();
}
}
}

SanDeGaSi 08 окт 2017 01:17
Как интересно и увлекательно можно человеку
провести своё свободное время?

Avito321vom 28 сен 2017 19:01
<b>Пополение баланса Авито (Avito) за 50%</b> | <b>Телеграмм @a1garant</b>

<b>Мое почтение, дорогие друзья!</b>

Готовы предоставить Всем вам сервис по пополнению баланса на действующие активные аккаунты Avito (а также, абсолютно новые). Если Вам нужны конкретные балансы - пишите, будем решать. Потратить можно на турбо продажи, любые платные услуги Авито (Avito).

<b>Аккаунты не Брут. Живут долго.</b>

Процент пополнения в нашу сторону и стоимость готовых аккаунтов: <b>50% от баланса на аккаунте.</b>
Если требуется залив на ваш аккаунт, в этом случае требуются логин и пароль Вашего акка для доступа к форме оплаты, пополнения баланса.
Для постоянных заказчиков гибкая система бонусов и скидок!

<b>Гарантия: </b>

<b>И, конечно же ничто не укрепляет доверие, как - Постоплата!!!</b> Вперед денег не просим...

Рады сотрудничеству!

<b>Заливы на балансы Авито</b>
________

как отвязать свой номер от старого аккаунта на авито
аккаунты компаний на авито
варфейс аккаунты авито
взять деньги в долг на авито
удалить аккаунт на avito

JamesZer 27 сен 2017 02:21










JamesZer 27 сен 2017 02:21










JamesZer 27 сен 2017 02:21










JamesZer 27 сен 2017 02:21










Nataliehic 25 сен 2017 00:28
Данное сообщение размещено здесь с помощью XRumer + XEvil 3.0
XEvil 3.0 - революционное приложение, способное обходить практически любую антибот-защиту.
Распознавание капчи Google, Facebook, Yandex, VKontakte, Captcha Com и свыше 8400 тысяч других типов!
Вы читаете это - значит, это работает! ;)
Подробности на официальном сайте XEvil.Net, есть бесплатная демо-версия.

Александр 26 авг 2017 10:09

using System;
using System.Collections.Generic;

namespace Lesson21
{
abstract class Human
{
public string Nation;
public string Hi;
public string Name;
public abstract void Greeting();
}
class Russian : Human
{
public Russian(string name)
{
Name = name;
Hi = "Привет";
Nation = "Русский";
}
public override void Greeting()
{
Console.WriteLine("Имя: " + Name + "\n" + "Национальность: " + Nation + "\n" + "Приветствие: " + Hi);
}
}
class Ukrainian : Human
{
public Ukrainian(string name)
{
Name = name;
Hi = "Привiт";
Nation = "Украинец";
}
public override void Greeting()
{
Console.WriteLine("Имя: " + Name + "\n" + "Национальность: " + Nation + "\n" + "Приветствие: " + Hi);
}
}
class American : Human
{
public American(string name)
{
Name = name;
Hi = "Hi";
Nation = "Американец";
}
public override void Greeting()
{
Console.WriteLine("Имя: " + Name + "\n" + "Национальность: " + Nation + "\n" + "Приветствие: " + Hi);
}
}


class MainClass
{
public static void Main(string[] args)
{
List<Human> humans = new List<Human>();
humans.Add(new Russian("Владимир"));
humans.Add(new Ukrainian("Олег"));
humans.Add(new American("John"));

foreach (Human i in humans)
{
i.Greeting();
Console.WriteLine();
}
Console.ReadKey();
}
}
}


phenix7767 13 апр 2017 18:09

namespace Lessons
{
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

internal abstract class Human
{
public string Name { get; set; }

protected Human(string name)
{
this.Name = name;
}

public abstract void SayHello();
}

internal class Russian : Human
{
public Russian(string name)
: base(name)
{
}

public override void SayHello()
{
Console.WriteLine(this.Name + " говорит: Привет!");
}
}

internal class Ukrain : Human
{
public Ukrain(string name)
: base(name)
{
}

public override void SayHello()
{
Console.WriteLine(this.Name + " говорит: Привiт!");
}
}

internal class American : Human
{
public American(string name)
: base(name)
{
}

public override void SayHello()
{
Console.WriteLine(this.Name + " говорит: Hi!");
}
}
List<Human> humans = new List<Human>();
humans.Add(new Russian("Вася"));
humans.Add(new Russian("Петя"));
humans.Add(new Ukrain("Мiкола"));
humans.Add(new Ukrain("Пётр"));
humans.Add(new American("Jhon"));
humans.Add(new American("Alfred"));
foreach (Human h in humans)
{
h.SayHello();
}
}


Arm 03 фев 2017 18:38
namespace MyFirstConsoleApp
{
class Program
{
static void Main(string[] args)
{
List<Person> p1 = new List<Person>();
p1.Add(new hay("Armenak"));
p1.Add(new hay("Harut"));
p1.Add(new hay("Sargis"));
p1.Add(new ukrainka("Alyon"));
p1.Add(new rus("Svet"));
p1.Add(new ukrainka("Krist"));
p1.Add(new rus("Artur"));
foreach(Person p2 in p1)
{
p2.Baylus();
}
}
}
abstract class Person
{
protected String name;
public Person(String name)
{
this.name = name;
}
public abstract void Baylus();
}
class hay : Person
{
public hay(String name) : base(name) { }
public override void Baylus()
{
Console.WriteLine(name + "-y hay e ev na voxjonume dzez");
}
}
class rus : Person
{
public rus(String name) : base(name) { }
public override void Baylus()
{
Console.WriteLine(name + "-y rus e ev na voxjonume dzez ruseren(privet) eli uzuma asi");
}
}
class ukrainka : Person
{
public ukrainka(String name) : base(name) { }
public override void Baylus()
{
Console.WriteLine(name + "-y ukrainkay e ev na voxjonume dzez ukraineren(Hi) eli uzuma asi");
}
}
}

Юрец 14 ноя 2016 12:40

namespace HumAbstract
{
abstract class Human
{
public string Name { get; set; }//создаем свойство

public Human(string n)// конструктор базового класса
{
Name = n;
}

public abstract void Greeting();// создаем абстрактный метод
}

class Ukr : Human//создаем класс наследник
{
public string Nation { get; set; }

public Ukr(string n, string nat):base (n)
{
Nation = nat;
}

public override void Greeting()//реализуем абстрактный метод
{
Console.WriteLine("Здрастуйте, мене звуть {0}, моя страна {1}", Name, Nation);
}
}

class Rus : Human//создаем класс наследник
{
public string Nation { get; set; }

public Rus(string n, string nat) : base(n)
{
Nation = nat;
}

public override void Greeting()//реализуем абстрактный метод
{
Console.WriteLine("Здрастуйте, меня зовут {0}, моя страна {1}", Name, Nation);
}
}
class Program
{
static void Main(string[] args)
{
Rus Ivan = new Rus("Игнат", "Россия");
Ukr Hohol = new Ukr("Саша", "Украина");

Ivan.Greeting();
Hohol.Greeting();
Console.ReadKey();

}
}
}


Игорь 26 июл 2016 22:17
{
abstract class People
{
public string National;
public string Sayhello;

public People(string national)
{

}
public abstract void SayHello();
}

class Russion : People
{
public Russion(string national,string sayhello) : base(national)
{
Sayhello = sayhello;
National = national;
}

public override void SayHello()
{
Console.WriteLine("Национальность: " + National + " Приветствие: " + Sayhello);
}
}

class Ukraine : People
{
public Ukraine(string national, string sayhello) : base(national)
{
Sayhello = sayhello;
National = national;
}

public override void SayHello()
{
Console.WriteLine("Национальность: " + National + " Приветствие: " + Sayhello);
}
}

class German : People
{
public German(string national, string sayhello) : base(national)
{
Sayhello = sayhello;
National = national;
}

public override void SayHello()
{
Console.WriteLine("Национальность: " + National + " Приветствие: " + Sayhello);
}
}


class Program
{
static void Main(string[] args)
{
List<People> people = new List<People>();
people.Add(new Russion("Русский", "Привет"));
people.Add(new Ukraine("Украинец", "Привiт"));
people.Add(new German("Немец", "Hallo"));


foreach (People people2 in people)
{
people2.SayHello();
}
Console.ReadLine();
}
}
}

Максим 31 май 2016 19:38

using System;
using System.Collections.Generic;

namespace тренировка
{
class Proga
{
static void Main(string[] args)
{
List<Human> humans = new List<Human>() { new Russian("Вася"), new Ukrainetz("Петро"), new American("Jack") };
foreach(Human human in humans)
{
human.To_Say_A_Greeting();
}
Console.ReadKey();
}
}
abstract class Human
{
public string Name { get; set; }
public abstract void To_Say_A_Greeting();
}
class Russian : Human
{
public Russian(string name)
{
Name = name;
}
public override void To_Say_A_Greeting()
{
Console.WriteLine("Привет! Меня зовут " + Name + "! Я русский.");
}

}
class Ukrainetz : Human
{
public Ukrainetz(string name)
{
Name = name;
}
public override void To_Say_A_Greeting()
{
Console.WriteLine("Привiт! Меня звати " + Name + "! Я украiнец.");
}

}
class American : Human
{
public American(string name)
{
Name = name;
}
public override void To_Say_A_Greeting()
{
Console.WriteLine("Hello! My name is " + Name + "! I'm american.");
}

}
}

Юрий 16 май 2016 22:09

namespace ConsoleApplication1
{
abstract class Human
{
public string Name { get; set; }
public string Nation { get; protected set; }
public abstract void SayHello();
}
class Russian:Human
{
public Russian(string name)
{
Name = name;
Nation = "русский";
}
public override void SayHello()
{
Console.WriteLine("Привет! Меня зовут "+ Name+"! Я "+ Nation);
}

}
class Ukrainian:Human
{
public Ukrainian(string name)
{
Name = name;
Nation = "украiнець";
}
public override void SayHello()
{
Console.WriteLine("Привiт! Мене звати " + Name + "! Я " + Nation);
}
}
class American:Human
{
public American(string name)
{
Name = name;
Nation = "american";
}
public override void SayHello()
{
Console.WriteLine("Hello! My name is " + Name + "! I'm " + Nation);
}

}

class Program
{
static void Main(string[] args)
{
List<Human> humans = new List<Human>();
humans.Add(new Russian("Вася"));
humans.Add(new Ukrainian("Петро"));
humans.Add(new American("John"));
foreach (Human human in humans)
human.SayHello();
Console.ReadKey();
}

}
}


Александр Михалев 16 апр 2016 17:17

namespace LearningProject
{
abstract class Human
{
public string Name { get; set; }
public string Hi { get; protected set; }
public abstract void SayHi();
}
class Russian : Human
{
public Russian(string name)
{
Name = name;
Hi = "Привет, я из России!";
}
public override void SayHi()
{
Console.WriteLine("Россиянин " + Name + " говорит: " + Hi);
Console.WriteLine("_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ");
}
}
class Ukrainian : Human
{
public Ukrainian(string name)
{
Name = name;
Hi = "Привіт, я з України!";
}
public override void SayHi()
{
Console.WriteLine("Українець " + Name + " каже: " + Hi);
Console.WriteLine("_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ");
}
}
class English : Human
{
public English(string name)
{
Name = name;
Hi = "Hi, i am from Ingland";
}
public override void SayHi()
{
Console.WriteLine("Englishman " + Name + " say: " + Hi);
Console.WriteLine("_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ");
}
}
class Program
{
static void Main(string[] args)
{
List<Human> humans = new List<Human>();
humans.Add(new Russian("Петр"));
humans.Add(new Ukrainian("Василь"));
humans.Add(new English("James"));
foreach (Human human in humans)
human.SayHi();

Console.ReadKey();
}
}
}

Михаил 08 апр 2016 16:32
Вывод:


Михаил: Привет!
Тарас Бульба: Привiт!
John: Hi!


Программа:


abstract class Human
{
public string Name { get; set; }

public abstract void sayHello ();

}

class Russian : Human
{
public Russian (string name)
{
Name = name;
}

public override void sayHello ()
{
Console.WriteLine (Name + ": Привет!");
}
}

class Ukrainian : Human
{
public Ukrainian (string name)
{
Name = name;
}

public override void sayHello ()
{
Console.WriteLine (Name + ": Привiт!");
}
}

class American : Human
{
public American (string name)
{
Name = name;
}

public override void sayHello ()
{
Console.WriteLine (Name + ": Hi!");
}
}

class Example
{
static void Main(string[] args) {
List<Human> people = new List<Human> ();

people.Add (new Russian("Михаил"));
people.Add (new Ukrainian("Тарас Бульба"));
people.Add (new American("John"));

foreach (Human human in people) {
human.sayHello ();
}
}
}

Akhvo 09 мар 2016 14:46
Здороваемся и нам отвечают на соответствующем языке, говорят кто по национальности...

using System;
using System.Collections.Generic;

namespace lesson_21
{
abstract class Man
{
public string nationality;
public string nationalityHello;
public abstract string Nationality { get; set; }
public abstract string NationalityHello { get; set; }
public abstract void GetHello(string NationalityHello);

}

class Rus : Man
{
public override string Nationality //объявляем свойство национальность
{
get { return nationality; }
set { nationality = value; }
}

public override string NationalityHello //объявляем свойство национальное приветствие
{
get { return nationalityHello; }
set { nationalityHello = value; }
}

public Rus()// объявляем конструктор
{
Nationality = "русский";
NationalityHello = "Привет!";
}

public override void GetHello(string NationalityHello)// переопределяем метод
{
if (NationalityHello == "Привет!")
{
Console.WriteLine(NationalityHello + " я тоже " + Nationality);
}
}
}

class Uk : Man
{
public override string Nationality //объявляем свойство национальность
{
get { return nationality; }
set { nationality = value; }
}

public override string NationalityHello //объявляем свойство национальное приветствие
{
get { return nationalityHello; }
set { nationalityHello = value; }
}

public Uk()
{
Nationality = "украинец";
NationalityHello = "Привiт!";
}

public override void GetHello(string NationalityHello) // переопределяем метод
{
if (NationalityHello == "Привiт!")
{
Console.WriteLine(NationalityHello + " я тоже " + Nationality);
}
}
}

class Deutsch : Man
{
public override string Nationality //объявляем свойство национальность
{
get { return nationality; }
set { nationality = value; }
}

public override string NationalityHello //объявляем свойство национальное приветствие
{
get { return nationalityHello; }
set { nationalityHello = value; }
}

public Deutsch()
{
Nationality = "немец";
NationalityHello = "Hallo!";
}

public override void GetHello(string NationalityHello) // переопределяем метод
{
if (NationalityHello == "Hallo!")
{
Console.WriteLine(NationalityHello + " я тоже " + Nationality);
}
}
}

class Program
{
static void Main(string[] args)
{
List<Man> records = new List<Man>();
records.Add(new Rus());//инициализируем русского
records.Add(new Uk());//инициализируем украинца
records.Add(new Deutsch());//инициализируем немца

Console.WriteLine("Введи приветствие!(Привет!/Привiт!/Hallo!)");
string n = Console.ReadLine(); //звороваемся
foreach (Man r in records)

r.GetHello(n);// нам отвечает человек соответствующей национальности

Console.ReadKey();


}
}
}


voloshyn-i 17 фев 2016 12:00
abstract class National
{
public string Name { get; set; }

public National(string name)
{
Name = name;
}
public abstract string Hello(); //объявление абстрактного метода

}

class Ukraine : National
{
public Ukraine (string name) : base(name)
{

}

public override string Hello() //объявление виртуального метода
{
return "Доброго дня!\n";
}
}
class Rusha : National
{
public Rusha(string name) : base(name)
{

}

public override string Hello() //объявление виртуального метода
{
return "Здрасте!\n";
}
}

class Program
{

static void Main(string[] args)
{
List<National> people = new List<National>();
people.Add(new Rusha("Василий"));
people.Add(new Rusha("Андрей"));
people.Add(new Ukraine("Олена"));
foreach (National p in people)
{
Console.WriteLine(p.Name + " " + p.Hello());



}

Console.ReadKey();
}
}

neronovs 07 янв 2016 15:59

public abstract class Person
{

public string Name { get; set; }
public string Say { get; set; }

public abstract void SayHello();
}
public class Russian : Person
{
public Russian(string name, string say)
{
Name = name;
Say = say;
}

public override void SayHello()
{
Console.WriteLine(Name + " says " + Say);
}
}
public class Ukrainian : Person
{
public Ukrainian(string name, string say)
{
Name = name;
Say = say;
}

public override void SayHello()
{
Console.WriteLine(Name + " says " + Say);
}
}
public class American : Person
{
public American(string name, string say)
{
Name = name;
Say = say;
}

public override void SayHello()
{
Console.WriteLine(Name + " says " + Say);
}
}

class Program
{
static void Main(string[] args)
{
List<Person> persons = new List<Person>();
persons.Add(new Russian("Russain", "Привет!"));
persons.Add(new Ukrainian("Ukrainian", "Привiт!"));
persons.Add(new American("American", "Hello!"));
foreach (Person person in persons)
person.SayHello();

Console.ReadKey();
}
}

Kolsky 30 дек 2015 20:19

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

namespace j
{
abstract class Human
{
public string Greeting { get; set; }
public abstract void SayHi();
}
class Ru : Human
{
public override void SayHi()
{
Greeting = "Привет!";
}
}
class Ua : Human
{
public override void SayHi()
{
Greeting = "Вітання!";
}
}
class Us : Human
{
public override void SayHi()
{
Greeting = "Hello!";
}
}
class Program
{
static void Main(string[] args)
{
List<Human> humans = new List<Human>();
humans.Add(new Ru());
humans.Add(new Ua());
humans.Add(new Us());
foreach (Human hmn in humans)
{
hmn.SayHi();
Console.WriteLine(hmn.Greeting);
}
Console.ReadKey(true);
}
}
}

Александр 21 сен 2015 12:31
abstract class Man
{
public string Name { get; set; }
public string Nacz { get; set; }
public string Privet { get; protected set; }

public abstract void SayHi();
}
class Russian : Man
{
public Russian(string privet)
{
Name = "Иван";
Nacz = "Русский";
Privet = privet;

}
public override void SayHi()
{
Console.WriteLine("Начинональность: " + Nacz + "\n" + "Имя человека: " + Name + "\n" + "Приветствие на родном языке: " + Privet + "\n" );
}
}
class Ukraine : Man
{
public Ukraine(string privet)
{
Name = "Петр";
Nacz = "Украинец";
Privet = privet;
}
public override void SayHi()
{
Console.WriteLine("Начинональность: " + Nacz + "\n" + "Имя человека: " + Name + "\n" + "Приветствие на родном языке: " + Privet + "\n");
}
}
class American : Man
{
public American(string privet)
{
Name = "Джон";
Nacz = "Американец";
Privet = privet;
}
public override void SayHi()
{
Console.WriteLine("Начинональность: " + Nacz + "\n" + "Имя человека: " + Name + "\n" + "Приветствие на родном языке: " + Privet + "\n");
}
}
class Program
{
static void Main(string[] args)
{
List<Man> mans = new List<Man>();
mans.Add(new Russian("Привет"));
mans.Add(new Ukraine("Привiт"));
mans.Add(new American("Hi"));

foreach (Man man in mans)
man.SayHi();
Console.ReadKey();
}
}
}

Маским 18 сен 2015 19:53

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

namespace HomeWork_Abstraction
{

abstract class Person
{
public string Name { get; protected set; }

public abstract void Greet();
}

class Russian : Person
{
public Russian(string name)
{
Name = name;
}

public override void Greet()
{
Console.WriteLine("Привет, сказал {0}", Name);

}

}

class Ukranian : Person
{
public Ukranian(string name)
{
Name = name;
}

public override void Greet()
{
Console.WriteLine("Привiт, сказав {0}", Name);
}
}

class British : Person
{
public British(string name)
{
Name = name;
}

public override void Greet()
{
Console.WriteLine("Hi, said {0}",Name);
}
}
class Program
{
static void Main(string[] args)
{

Console.WriteLine("На каком языке вы хотите услышать приветсвие?");
string s = Console.ReadLine();

Console.WriteLine("С каким именем?");
string m = Console.ReadLine();


if (s == "Украинский")
new Ukranian(m).Greet();
if(s == "Русский")
new Russian(m).Greet();

if (s == "Английский")
new British(m).Greet();


Console.ReadKey();
}
}
}


ROOT 24 авг 2015 15:19
//Домашнее задание//
Сделал чуть больше, чем надо(практика так скажем).

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

namespace Abstracts
{
abstract class Person
{
public string name { get;private set; }
public Person(string Name)
{
name = Name;
}
public abstract void Greeting();
}
class Russian : Person
{
public Russian(string Name)
: base(Name)
{ }
public override void Greeting()
{
Console.WriteLine("Привет {0}", name);
}
}
class American : Person
{
public American(string Name) : base(Name)
{ }
public override void Greeting()
{
Console.WriteLine("Hello {0}", name);
}
}
class Italian : Person
{
public Italian(string Name) : base(Name)
{ }
public override void Greeting()
{
Console.WriteLine("Ciao {0}", name);
}
}
class German : Person
{
public German(string Name) : base(Name)
{ }
public override void Greeting()
{
Console.WriteLine("Hallo {0}", name);
}
}
class France : Person
{
public France(string Name) : base(Name)
{}
public override void Greeting()
{
Console.WriteLine("Bonjour {0}", name);
}
}
class Program
{
public static void Error()
{
Console.Clear();
Console.WriteLine("Ошибка! Некорректный ввод! Попробуйте еще раз!");
Console.ReadLine();
Console.Clear();
}
public static void HelloMen()
{
try
{
Console.Clear();
Console.WriteLine("Введите ваш пол(ж, м)");
string sex = Console.ReadLine();
if (sex != "м" && sex != "ж")
{
Error();
Menu();
}
Console.WriteLine("Выберите страну, которую хотите посетить:\n1 Россия\n2 Америка\n3 Италия\n4 Германия\n5 Франция");
int select = Convert.ToInt32(Console.ReadLine());
if (sex == "м")
Console.WriteLine("Вы прибыли в выбранную вами страну и увидели прекрасную девушку. Как вы её назовёте при обращении?");
else if (sex == "ж")
Console.WriteLine("Вы прибыли в выбранную вами страну и увидели красивого мужчину. Как вы его назовёте при обращении?");
string name = Console.ReadLine();
if (select == 1)
{
Russian new_rus = new Russian(name);
new_rus.Greeting();
}
else if (select == 2)
{
American new_am = new American(name);
new_am.Greeting();
}
else if (select == 3)
{
Italian new_it = new Italian(name);
new_it.Greeting();
}
else if (select == 4)
{
German new_gem = new German(name);
new_gem.Greeting();
}
else if (select == 5)
{
France new_fr = new France(name);
new_fr.Greeting();
}
else
{
Error();
Menu();
}
Console.ReadLine();
Menu();
}
catch(Exception)
{
Error();
Menu();
}
}
public static void Menu()
{
Console.Clear();
try
{
Console.WriteLine("1 Запуск программы\n2 Выход");
int select = Convert.ToInt32(Console.ReadLine());
if (select == 1)
HelloMen();
else if (select == 2)
return;
else
{
Error();
Menu();
}
}
catch (Exception)
{
Error();
Menu();
}
}
static void Main(string[] args)
{
Menu();
}
}
}

Максим 29 июл 2015 17:34
AlPer
---
Тут приводить не нужно:
(человек as Русский).СказатьПриветствие()
Достаточно:
человек.СказатьПриветствие()

AlPer 07 июл 2015 22:23

public abstract class Человек
{
public string Name { get; private set; }
public Человек(string name)
{
Name = name;
}

public abstract string СказатьПриветствие();
}

class Русский : Человек
{
public Русский(string name)
: base(name)
{ }

public override string СказатьПриветствие()
{
return "Привет";
}
}

class Украинец : Человек
{
public Украинец(string name)
: base(name)
{ }

public override string СказатьПриветствие()
{
return "Привiт";
}
}

class Американец : Человек
{
public Американец(string name)
: base(name)
{ }

public override string СказатьПриветствие()
{
return "Hi";
}
}

class Programm
{
static void Main()
{
List<Человек> человеки = new List<Человек>();
человеки.Add(new Русский("Иван"));
человеки.Add(new Украинец("Софія"));
человеки.Add(new Американец("Bob"));
foreach (Человек человек in человеки)
{
if (человек is Русский)
Console.WriteLine("Русский по имени {0} поприветствует тебя так: {1}",человек.Name,(человек as Русский).СказатьПриветствие());

if (человек is Украинец)
Console.WriteLine("Украинец по имени {0} поприветствует тебя так: {1}", человек.Name, (человек as Украинец).СказатьПриветствие());

if (человек is Американец)
Console.WriteLine("Американец по имени {0} поприветствует тебя так: {1}", человек.Name, (человек as Американец).СказатьПриветствие());
}
// по сильной ссылке
Console.WriteLine(new string('-',60));
Русский man1 = new Русский("Иван");
Console.WriteLine(man1.СказатьПриветствие());
Console.ReadLine();
}
}

Warguss 22 июн 2015 08:38
Может кому будет интересно, еще одна задачка на эту тему:
Создайте класс AbstractHandler.
В теле класса создать методы void Open(), void Create(), void Chenge(), void Save().
Создать производные классы XMLHandler, TXTHandler, DOCHandler от базового класса AbstractHandler.
Написать программу, которая будет выполнять определение документа и для каждого формата должны быть методы открытия, создания, редактирования, сохранения определенного формата документа.

Юлия 15 июн 2015 07:54


{
abstract class People
{
public string Name;
public string Say;
public abstract void SayHello();
}
class Russian : People
{
public Russian(string name)
{
Name = name;
Say = "Привет";
}
public override void SayHello()
{
Console.WriteLine(Name+" "+ Say);
}
}
class English : People
{
public English(string name)
{
Name = name;
Say = "Hello";
}
public override void SayHello()
{
Console.WriteLine(Name + " " + Say);
}
}
class Ukrain : People
{
public Ukrain(string name)
{
Name = name;
Say = "Прiвiт";
}
public override void SayHello()
{
Console.WriteLine(Name + " " + Say);
}
}
class Program
{
static void Main(string[] args)
{
List<People> people = new List<People>();
people.Add(new Russian("Юлия"));
people.Add(new English("Mark"));
people.Add(new Ukrain("Юрii"));
people.Add(new Russian("Олег"));
people.Add(new Russian("Саша"));

foreach (People p in people)
p.SayHello();
Console.ReadKey();

}
}
}


Flamingo 08 июн 2015 01:50

abstract class People
{
internal string Name;
public People(string name)
{
Name = name;
}
public abstract void SayHello();
}
class Russian : People
{
internal string Greeting;
public Russian(string name, string greeting) : base (name)
{
Name = name;
Greeting = greeting;
}
public override void SayHello()
{
Console.WriteLine(Greeting + ", меня зовут " + Name);
}
}
class Ukrainian : People
{
internal string Greeting;
public Ukrainian(string name, string greeting) : base (name)
{
Name = name;
Greeting = greeting;
}
public override void SayHello()
{
Console.WriteLine(Greeting + ", моє ім'я " + Name);
}
}
class American : People
{
internal string Greeting;
public American(string name, string greeting) : base (name)
{
Name = name;
Greeting = greeting;
}
public override void SayHello()
{
Console.WriteLine(Greeting + ", my name is " + Name);
}
}
class Program
{
static void Main(string[] args)
{
List<People> men = new List<People>();
men.Add(new Russian("Артём", "Привет"));
men.Add(new Ukrainian("Дима", "Привiт"));
men.Add(new American("Michael", "Hello"));
foreach(People man in men)
{
man.SayHello();
}
}
}

Warguss 07 июн 2015 21:31

abstract class Person
{
public string Name { get; protected set; }

public abstract void SpeakGreetings();
}

class Russian : Person
{
public Russian(string name)
{
Name = name;
}
public override void SpeakGreetings()
{
Console.WriteLine("Русский {0}, говорит: Привет!", Name);
}
}

class Ukrainian : Person
{
public Ukrainian(string name)
{
Name = name;
}

public override void SpeakGreetings()
{
Console.WriteLine("Украинец {0}, говорит: Привiт!", Name);
}
}

class American : Person
{
public American(string name)
{
Name = name;
}
public override void SpeakGreetings()
{
Console.WriteLine("Американец {0}, говорит: Hello!", Name);
}
}



class Program
{
static void Main()
{
List<Person> peoples = new List<Person>
{
new Russian("Георгий"),
new Ukrainian("Андрiй"),
new American("George")
};

foreach(var people in peoples)
{
people.SpeakGreetings();
}

Console.Read();
}
}

Maksim 05 июн 2015 16:20

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

namespace ConsoleApplication1
{
abstract class Human
{
public string Name { get; set; }
public abstract void Hello();
}

class Russian:Human
{
public Russian(string name)
{
Name = name;
}
public override void Hello()
{
Console.WriteLine("Привет\t" + Name);
}
}

class Ukraine:Human
{
public Ukraine(string name)
{
Name = name;
}
public override void Hello()
{
Console.WriteLine("Привiт\t" + Name);
}
}

class USA:Human
{
public USA(string name)
{
Name = name;
}
public override void Hello()
{
Console.WriteLine("Hello\t" + Name);
}

}
class Program
{
static void Main(string[] args)
{
List<Human> human = new List<Human>();
human.Add(new Russian("Иван"));
human.Add(new Ukraine("Никола"));
human.Add(new USA("Smit"));

foreach(Human humans in human)
humans.Hello();

Console.ReadKey();
}
}
}


Александр_Бугай 16 май 2015 19:19
Спасибо!

Максим 14 май 2015 15:53
Александр_Бугай
---
Да, нормально

Александр_Бугай 14 май 2015 15:42
abstract class Human
{
public string Name{get;set;}
public abstract void SayHello();
}
class Russian : Human
{
public Russian(string name)
{
Name=name;
Console.WriteLine(Name+":");
}
public override void SayHello()
{
Console.WriteLine("Privet");
}
}
class Ukrainian : Human
{
public Ukrainian(string name)
{
Name=name;
Console.WriteLine(Name + ":");
}
public override void SayHello()
{
Console.WriteLine("Vitaju");
}
}
class American : Human
{
public American(string name)
{
Name=name;
Console.WriteLine(Name + ":");
}
public override void SayHello()
{
Console.WriteLine("Hello");
}
}

class Program
{
static void Main(string[] args)
{
byte chooseNation;
string[] nation = { "Russian", "Ukrainian", "American" };
Console.WriteLine("Input nation. 1- Russian. 2 - Ukrainian, 3 - American");
chooseNation = Convert.ToByte(Console.ReadLine());
if (chooseNation == 1)
{
Russian russian1 = new Russian("Ivan");
russian1.SayHello();

}
else if (chooseNation == 2)
{
Ukrainian ukrainian1 = new Ukrainian("Petro");
ukrainian1.SayHello();
}
else
{
American american1 = new American("John");
american1.SayHello();
}
Console.ReadLine();
}
}

phoenixpakko 28 апр 2015 10:45
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
abstract class Human // Объявление абстрактного класса Человек
{
public string Name { get; set; }
public string Nationality { get; protected set; }

public abstract void SayHello(); // объявление абстрактного метода
}
class Russian : Human
{
public Russian(string name)
{
Name = name;
Nationality = "Русский";
}
public override void SayHello() // реализация абстрактного метода
{
Console.WriteLine("{0} {1} говорит Вам 'Здравствуйте!'", Nationality, Name);
}
}
class Ukrainian : Human
{
public Ukrainian(string name)
{
Name = name;
Nationality = "Украинец";
}
public override void SayHello() // реализация абстрактного метода
{
Console.WriteLine("{0} {1} говорит Вам 'Добрий день!'", Nationality, Name);
}
}
class American : Human
{
public American(string name)
{
Name = name;
Nationality = "Американец";
}
public override void SayHello() // реализация абстрактного метода
{
Console.WriteLine("{0} {1} говорит Вам 'Hello!'", Nationality, Name);
}
}
class Polish : Human
{
public Polish(string name)
{
Name = name;
Nationality = "Поляк";
}
public override void SayHello() // реализация абстрактного метода
{
Console.WriteLine("{0} {1} говорит Вам 'Dzien dobry!'", Nationality, Name);
}
}
class Program
{
static void Main(string[] args)
{
List<Human> humans = new List<Human>();
humans.Add(new Russian("Вовочка"));
humans.Add(new Ukrainian("Миколка"));
humans.Add(new American("Jonny"));
humans.Add(new Polish("Jacek"));

foreach (Human human in humans)
human.SayHello();

Console.ReadKey();
}
}
}

Темир 16 мар 2015 15:22
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
abstract class People
{
public string Name { get; set; }
public string National { get; set; }
public abstract void SayHello();
}
class Russian : People
{
public Russian(string name) {
Name = name;
National = "Russian";
}
public override void SayHello()
{
Console.WriteLine("Привет");
}
}
class Kazakh : People
{
public Kazakh(string name)
{
Name = name;
National = "Kazakh";
}
public override void SayHello()
{
Console.WriteLine("Салем");
}
}

class Program
{
static void Main(string[] args)
{
List<People> peopls = new List<People>();
peopls.Add(new Russian("Олег"));
peopls.Add(new Kazakh("Темир"));

foreach (People people in peopls)
people.SayHello();
}
}
}

sfsd 13 мар 2015 15:40
abstract class pupil
{
internal string Name { get; set; }
internal abstract void sayhellorus();
internal abstract void sayhelloeng();
}
class eng : pupil
{
internal eng(string name) { Name = name; }
internal override void sayhellorus()
{
Console.WriteLine(Name + ": privetstvie: hi");
}
internal override void sayhelloeng()
{
Console.WriteLine(Name + ": greeting: hi");
}
}
class rus : pupil
{
internal rus(string name) { Name = name; }
internal override void sayhellorus()
{
Console.WriteLine(Name + ": privetstvie: privet");
}
internal override void sayhelloeng()
{
Console.WriteLine(Name + ": greeting: privet");
}
}
class Program
{
static void Main(string[] args)
{
List<pupil> g = new List<pupil>();
g.Add(new rus("Kolya"));
g.Add(new rus("Vasya"));
g.Add(new eng("Nick"));
g.Add(new eng("Anna"));
Console.WriteLine("choose language:\nviberite yazik: 1-eng, 2-rus.");
int d = 0;
try
{
d = Convert.ToInt32(Console.ReadLine());
if (d != 1 && d != 2)
{
do
{
Console.WriteLine("choose again:\nvvedite zanovo:");
d = Convert.ToInt32(Console.ReadLine());
}
while (d != 1 && d != 2);
}
}
catch (Exception ex)
{
Console.WriteLine("You enter something wrong.\nvi vveli chtoto nepravilnoe.");
}
foreach (pupil el in g)
{
if (d == 1)
el.sayhelloeng();
else if (d == 2)
el.sayhellorus();
}
Console.ReadLine();
}
}



Максим 26 фев 2015 23:26
vostok7777
---
Нормально, только лучше не передавать в конструктор параметр "национальность" и свойство это сделать только на чтение. И код вставляйте так, чтобы он подсвечивался, пользуйтесь кнопкой "исходный код" внизу окна комментария

vostok7777 26 фев 2015 20:39
Здравствуйте!
Взгляните пжл.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

abstract class Human//Объявление абстрактного класса.
{
public string Nationality { get; set; }
public string Greetings { get; protected set; }
public abstract void Privetstvie();//Объявление абстрактного метода.
}
class Russian : Human
{
public Russian(string nation)
{
Nationality = nation;
Greetings = "Привет!";

}
public override void Privetstvie()
{
Console.WriteLine("Национальность: " + Nationality + "\n" + "Приветствие: " + Greetings + "\n");
}
}
class Uzbek : Human
{
public Uzbek(string nation)
{
Nationality = nation;
Greetings = "Салом!";
}
public override void Privetstvie()
{
Console.WriteLine("Национальность: " + Nationality + "\n" + "Приветствие: " + Greetings + "\n");

}
}
class Korean : Human
{
public Korean(string nation)
{
Nationality = nation;
Greetings = "Анехасиё!";
}
public override void Privetstvie()
{
Console.WriteLine("Национальность: " + Nationality + "\n" + "Приветствие: " + Greetings + "\n");
}

}
class Program{
static void Main(string[] args)
{
List<Human>human=new List<Human>();
human.Add(new Russian("Русский"));
human.Add(new Uzbek("Узбек"));
human.Add(new Korean("Кореец"));
foreach(Human h in human)
h.Privetstvie();
Console.ReadKey();
}
}

Виталий 19 фев 2015 10:41
В этот раз я сделал эту домашку быстро:

abstract class Man
{
public string Hello;
public abstract void sayHello();
}
class russian : Man
{
public override void sayHello()
{
Console.WriteLine("Привет!");
}
}
class ukraine : Man
{
public override void sayHello()
{
Console.WriteLine("Привiт!");
}
}
class american : Man
{
public override void sayHello()
{
Console.WriteLine("Hello!");
}
}
class Program
{
static void Main(string[] args)
{
while (true)
{
russian russian = new russian();
ukraine ukraine = new ukraine();
american american = new american();
string pult;
pult = Console.ReadLine();
if (pult == "Русский")
russian.sayHello();
if (pult == "Украинец")
ukraine.sayHello();
if (pult == "Американец")
american.sayHello();
Console.ReadKey();
}
}
}

Oper 15 фев 2015 11:21
using System;
using System.Collections.Generic;

namespace L21
{
abstract class Person
{
protected string Name { get; set; }
public abstract void SayGreeting();
protected Person(string name)
{
Name = name;
}
}

class Russian : Person
{
public Russian(string name) : base(name) { }
public override void SayGreeting()
{
Console.WriteLine("Привет, меня зовут {0}", Name);
}
}

class Ukrainian : Person
{
public Ukrainian(string name) : base(name) { }
public override void SayGreeting()
{
Console.WriteLine("Привiт, мене звати {0}", Name);
}
}

class American : Person
{
public American(string name) : base(name) { }
public override void SayGreeting()
{
Console.WriteLine("Hi, my name is {0}",Name);
}
}

class Program
{
static void Main(string[] args)
{
List<Person> GuestList = new List<Person>();
GuestList.Add(new Russian("Андрей"));
GuestList.Add(new Ukrainian("Микола"));
GuestList.Add(new American("Frank"));
GuestList.Add(new Ukrainian("Остап"));
GuestList.Add(new Russian("Иван"));
GuestList.Add(new Russian("Владимир"));
GuestList.Add(new American("Scott"));

foreach (Person g in GuestList)
g.SayGreeting();

Console.ReadKey();
}
}
}

AlexWolf 02 фев 2015 16:09

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

namespace ConsoleApplication1
{
abstract class Human
{
public string Name { get; set; }
public string Race { get; set; }
public string Say { get; set; }
public abstract void Hello();
}
class RUS : Human
{
public RUS(string name, string race, string say)
{
Name = name;
Race = race;
Say = say;
}
public override void Hello()
{
Console.WriteLine(Name + " -" + Race + ". Он говорит тебе - " + Say);
}
}
class ENG : Human
{
public ENG(string name, string race, string say)
{
Name = name;
Race = race;
Say = say;
}
public override void Hello()
{
Console.WriteLine(Name + " -" + Race +". Он говорит тебе - "+Say);
}
}
class UKR : Human
{
public UKR(string name, string race, string say)
{
Name = name;
Race = race;
Say = say;
}
public override void Hello()
{
Console.WriteLine(Name + " -" + Race + ". Он говорит тебе - " + Say);
}
}
class JUP : Human
{
public JUP(string name, string race, string say)
{
Name = name;
Race = race;
Say = say;
}
public override void Hello()
{
Console.WriteLine(Name + " -" + Race + ". Он говорит тебе - " + Say);
}
}
class FRA : Human
{
public FRA(string name, string race, string say)
{
Name = name;
Race = race;
Say = say;
}
public override void Hello()
{
Console.WriteLine(Name + " - " + Race + ". Он говорит тебе - " + Say);
}
}
class Program
{
static void Main(string[] args)
{
RUS russian = new RUS("Иван", "русский", "Привет!");
ENG english = new ENG("Djohn", "американец", "Hello!");
UKR ukrainec = new UKR("Егор", "украинец", "Привiт!");
JUP japanec = new JUP("Yamomoto", "японец", "Konnichiwa!");
FRA francuz = new FRA("Frank", "француз", "Bonjour!");
bool on = true;
Console.WriteLine("Нажми от 1 до 5.");
do
{
switch (Console.ReadKey(true).Key)
{
case ConsoleKey.D1:
russian.Hello();
break;
case ConsoleKey.D2:
english.Hello();
break;
case ConsoleKey.D3:
ukrainec.Hello();
break;
case ConsoleKey.D4:
japanec.Hello();
break;
case ConsoleKey.D5:
francuz.Hello();
break;
case ConsoleKey.Escape:
on = false;
break;
default:
Console.WriteLine("Эти кнопки не работают!");
break;
}
}
while (on);


}
}
}


pinguin-linuxoid 24 дек 2014 23:30
Большое спасибо! Все работает) Чесно говоря довольно сложная тема с этим абстрактным свойством. Вероятно потому что еще не проходил инкапсуляцию. Еще раз спасибо за уроки)

Максим 24 дек 2014 12:29
pinguin-linuxoid
---
Я забыл в примере объявить защищенное поле, которое будет инкапсулировать свойство.

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

К обычному свойству необходимо создавать защищенное поле:
protected string name;
public abstract string Name { get; set; }

И потом в наследнике:
public override string Name {
get {
return name;
}
set {
name = value;
}
}

pinguin-linuxoid 23 дек 2014 19:59
Уважжаемый Админ спасибо вам за уроки, и есть одно замечание по этому уроку. В процессе вы рассказывали про Абстрактные свойства, но увы когда я делаю как вы у меня возникает переполнение стека.

Тут 2 варианта
1 если я в наследнике оставляю {get; set} все работает но тогда какой смысл делать override свойства поля? Значения свойства получается как были по умолчанию так и остались.
2 если я в наследнике усовершенствую get {return a; } set {value = a}
при компиляции возникает переполнение.

И самое интересное наблюдение - в абстрактом классе абстрактное свойство обязательно должно иметь {get; set} - и уже в этом абстрактное свойство сильно отличается от абстрактного метода.

Разьясните пожалуста что к чему.

Диманиак 01 дек 2014 08:04
namespace ConsoleApplicationTest
{
abstract class Human
{
internal string Name { get; set; }
internal abstract void Salutation();
}
class Ukrainian : Human
{
internal Ukrainian(string name)
{
Name = name;
}
internal override void Salutation()
{
Console.WriteLine(Name + " говорить \"Вітаю\"!");
}
}
class Russian : Human
{
internal Russian(string name)
{
Name = name;
}
internal override void Salutation()
{
Console.WriteLine(Name + " говорит \"Здравствуй\"!");
}
}
class American : Human
{
internal American(string name)
{
Name = name;
}
internal override void Salutation()
{
Console.WriteLine(Name + " say \"Hello\"!");
}
}
class Program
{
static void Main(string[] args)
{
List<Human> humans = new List<Human>();
humans.Add(new Ukrainian("Василь"));
humans.Add(new Russian("Петр"));
humans.Add(new American("Jhon"));
foreach (Human human in humans)
{
human.Salutation();
}
Console.ReadKey();
}
}
}

Максим 12 ноя 2014 18:52
Jamshid
---
Да ничего, задания простое, сложно тут намудрить

Jamshid 11 ноя 2014 19:56
Что здесь можно оптимизировать?

_____________________________________________________________
using System;
using System.Collections.Generic;

namespace abstract_classes
{
class Program
{
public static void Main(string[] args)
{
List<HumanBeing> society = new List<HumanBeing>();

society.Add(new RussianMen("Вася"));
society.Add(new UzbekMen("Kamoliddin"));
society.Add(new EnglishMen("Winston"));

foreach(HumanBeing man in society) {
Console.Write(man.Name+" : ");
man.sayHello();
}

// TODO: Implement Functionality Here

Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
}

abstract class HumanBeing
{
public string Nationality {get; protected set;}
public string Name {get; protected set;}

public abstract void sayHello();
}

class RussianMen : HumanBeing
{
public RussianMen(string name)
{
Nationality = "Russian";
Name = name;
}

public override void sayHello()
{
Console.WriteLine("Привет");
}
}

class EnglishMen : HumanBeing
{
public EnglishMen(string name)
{
Nationality = "English";
Name = name;
}

public override void sayHello()
{
Console.WriteLine("Hello");
}
}

class UzbekMen : HumanBeing
{
public UzbekMen(string name)
{
Nationality = "Uzbek";
Name = name;
}

public override void sayHello()
{
Console.WriteLine("Assalomu Alaykum");
}
}
}
_________________________________________________________

Man 10 ноя 2014 15:29
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication6
{
abstract class Chelovek
{
public string Name { get; set; }
public abstract void Skazat_privetstvie();

}
class Ukr : Chelovek
{
public Ukr(string name)
{
Name = name;
}

public override void Skazat_privetstvie()
{
Console.WriteLine("Ukr: " + Name);
}
}
class Rus : Chelovek
{
public Rus(string name)
{
Name = name;
}

public override void Skazat_privetstvie()
{
Console.WriteLine("Rus: " + Name);
}
}
class Eng : Chelovek
{
public Eng(string name)
{
Name = name;
}

public override void Skazat_privetstvie()
{
Console.WriteLine("Eng: " + Name + "\n");
}
}
class Program
{

static void Main(string[] args)
{
List<Chelovek> chel = new List<Chelovek>();
chel.Add(new Ukr("Привiт"));
chel.Add(new Rus("Привет"));
chel.Add(new Eng("Нi"));
foreach (Chelovek shos in chel)
shos.Skazat_privetstvie();
Console.ReadKey();
}
}
}

why_not 16 окт 2014 15:19
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
abstract class Human
{
public string Name {get; set;}
public string Nation { get; set; }
public string Hello { get; protected set;}
public abstract void SayHello();
}
class Russian: Human
{

public Russian(string Name)
{
this.Name = Name;
Nation = "русский";
Hello = "Привет!";
}
public override void SayHello()
{
Console.WriteLine(Name + " - " + Nation + ", и говорит: \"" + Hello + "\"");
}

}
class Ukrainian: Human
{
public Ukrainian(string Name)
{
this.Name = Name;
Nation = "украинец";
Hello = "Привiт!";
}
public override void SayHello()
{
Console.WriteLine(Name + " - " + Nation + ", и говорит: \"" + Hello + "\"");
}
}
class American : Human
{
public American(string Name)
{
this.Name = Name;
Nation = "американец";
Hello = "Hi!";
}
public override void SayHello()
{
Console.WriteLine(Name + " - " + Nation + ", и говорит: \"" + Hello + "\"");
}
}
class Program
{
static void Main(string[] args)
{
List<Human> people = new List<Human>();
people.Add(new Russian("Гришка с пивзавода"));
people.Add(new Ukrainian("Тарас"));
people.Add(new American("John"));

foreach (Human human in people)
human.SayHello();
Console.ReadKey();
}
}
}

Максим 10 окт 2014 19:12
scn
---
Будут

scn 09 окт 2014 21:07
А будут уроки с Win формами или только консольки?

dimasik 22 май 2014 10:47
namespace abstractclass
{
abstract class Chelovek
{
public string name;
public abstract void Privetstvie();
}
class Ukrainian : Chelovek
{
public Ukrainian(string name)
{
this.name = name;
}
public override void Privetstvie()
{
Console.WriteLine(name + " Каже привіт");
}
}
class Russian : Chelovek
{
public Russian(string name)
{
this.name = name;
}
public override void Privetstvie()
{
Console.WriteLine(name + " говорит привет");
}
}
class Britisher : Chelovek
{
public Britisher(string name)
{
this.name = name;
}
public override void Privetstvie()
{
Console.WriteLine(name + " says hi");
}
}
class Program
{
static void Main(string[] args)
{
List<Chelovek> people = new List<Chelovek>();
people.Add(new Ukrainian("Микола"));
people.Add(new Russian("Иван"));
people.Add(new Britisher("John"));
foreach (Chelovek peop in people)
peop.Privetstvie();
Console.ReadKey();
}
}
}

Максим 06 май 2014 14:44
Andrew
---
name - имя входящего параметра. Так как Name и name это разные имена, указатель this использовать здесь не нужно. Если бы свойство было названо с маленькой буквы - тогда бы использовался this

Andrew 05 май 2014 22:43
Извените но я не сильно понимаю вот ету строчку
public Parrot(string name)
{
Name = name;
Type = "Птица";
}

что за перемення name? в уроке про консруктори било с this и просто через равно.. а вот про ето че то я не понял.. про name :)

Максим 22 апр 2014 14:48
Ромик
---
Это вопрос инкапсуляции, об этом написано в Уроке 24. Инкапсуляция в Си-шарп. Модификаторы доступа

Ромик 21 апр 2014 15:16
Задание очень легкое, выполнил быстро, потом посмотрел комментарии и вижу что такие варианты(или похожие) как у меня уже есть. Так что просто задам свой вопрос. Зачем нужно protected перед set? Я когда читал , смотрел на него как на лишнее слово в коде. Ведь я пишу и не собираюсь в мейне давать возможность задавать мое приветствие с клавиатуры или как либо иначе.

Илюфер 11 фев 2014 12:57
abstract class TheMan
{
public string Name { get; set; }
public string Welcome { get; protected set; }

public abstract void SayHello();
}


class Ukrainian : TheMan
{
public Ukrainian (string name)
{
Name = name;
Welcome = "Privit hlopci";
}

public override void SayHello()
{
Console.WriteLine(Name + "welcome: " + Welcome + " ");
}
}

class Russian : TheMan
{
public Russian(string name)
{
Name = name;
Welcome = "Zdravstvuyte";
}

public override void SayHello()
{
Console.WriteLine(Name + " welcome: " + Welcome + " ");
}
}

class Action
{
public static void Main()
{
List<TheMan> themans = new List<TheMan>();

themans.Add(new Ukrainian("Ukrainian"));
themans.Add(new Russian("Russian"));


foreach (TheMan man in themans)
{
man.SayHello();
}

Console.ReadKey();
}
}

Максим 18 дек 2013 18:40
RomanS
---
Класс System.Array является базовым для всех классов массивов конкретных типов, и CreateInstance() возвращает объект - массив определенного типа, а не System.Array. Это то, что описано в этом уроке. CreateInstance реализован в каждом классе наследнике, и возвраещет массив соответствующего типа. Как здесь GetInfo()

RomanS 18 дек 2013 12:39
Здравствуйте.
Вот какой вопрос возник: создавать экземпляры абстрактного класса нельзя. Изучая массивы наткнулся на такой способ их создания:
Array myArr = Array.CreateInstance(typeof(string), 1);
Смотрю на MSDN статический метод CreateInstance() - возвращает Array.
Это что, объект класса System.Array?Я сначала так и подумал, но потом взглянул на этот класс (System.Array) и оказалось что он абстрактный!
Помогите пожалуйста разобраться, как же работает этот код?

Заранее спасибо.

Nikolay 15 дек 2013 18:20
Admin, спасибо, отличные уроки, жду с нетерпением следующие уроки

Максим 15 дек 2013 16:14
Nikolay
---
Отлично, и очень важно, что вы закрыли аксессоры set для национальности и приветствия

Nikolay 14 дек 2013 22:35
abstract class Human
{
public string Name { get; set;}
public string Nationality { get; protected set;}
public string greeting { get; protected set; }

public abstract void SayHelloPeople();

}
class American: Human
{
public American(string name)
{
Name = name;
Nationality = "American";
greeting = "Hello";

}

public override void SayHelloPeople()
{
Console.WriteLine("Nationality: " + Nationality + "\n" + "His name " + Name + "\n" + "Say To All People " + greeting + "\n");
}

}
class Ukraine:Human
{

public Ukraine(string name)
{
Name = name;
Nationality = "Ukraine";
greeting = "Привіт";
}

public override void SayHelloPeople()
{
Console.WriteLine("Nationality: " + Nationality + "\n" + "His name " + Name + "\n" + "And He Says To All People " + greeting + "\n");
}
}
class Russian:Human
{
public Russian(string name)
{
Name = name;
Nationality = "Russian";
greeting = "Привет";
}

public override void SayHelloPeople()
{
Console.WriteLine("Nationality: " + Nationality + "\n" + "His name " + Name + "\n" + "And He Says To All People " + greeting + "\n");
}

}
class Program
{
static void Main(string[] args)
{
List<Human> peoples = new List<Human>();
peoples.Add(new American("Jon"));
peoples.Add(new Ukraine("Petro"));
peoples.Add(new Russian("Ivan"));

foreach (Human people in peoples)
people.SayHelloPeople();

Console.ReadKey();

}
}

Максим 09 дек 2013 23:44
Dima
---
Всё сделано как нужно

Dima 08 дек 2013 09:25
namespace TaskAbstractClass
{
abstract class Man
{
public string Name { get; set; }
public abstract void Greeting();
}
class Russki : Man
{
public Russki(string name)
{
Name = name;
}
public override void Greeting()
{Console.WriteLine(Name + ": " + "Привет");}
}
class American : Man
{ public American(string name)
{
Name = name;
}
public override void Greeting()
{Console.WriteLine(Name + ": " + "Hello");}
}
class Spaniard : Man
{ public Spaniard(string name)
{
Name = name;
}
public override void Greeting()
{Console.WriteLine(Name + ": " + "Hola");}
}
class Chech : Man
{
public Chech(string name)
{
Name = name;
}
public override void Greeting()
{ Console.WriteLine(Name + ": " + "Ahoj"); }
}
class Program
{
static void Main(string[] args)
{
List<Man> men = new List<Man>();
men.Add(new Russki("Николай"));
men.Add(new American("Jack"));
men.Add(new Spaniard("Enrique"));
men.Add(new Chech("Lukas"));
foreach (Man man in men)
man.Greeting();
Console.ReadKey();
}
}
}

Максим 17 ноя 2013 19:18
An
---
Всё сделано как нужно, еще бы английский подтянуть...) People - люди, Peoples - народы...

An 17 ноя 2013 18:45
abstract class People
{
public String Name;

public String PName
{
get { return Name; }
set { Name = value; }
}

public abstract void SayHello();

}

class Russia : People
{
public Russia(string name)
{
Name = name;
}

public override void SayHello()
{
Console.WriteLine("Russia" + "\t" + Name + "\t" + "Привет");
}
}
class Ukrain : People
{
public Ukrain(string name)
{
Name = name;
}

public override void SayHello()
{
Console.WriteLine("Ukrain" + "\t" + Name + "\t" + "Привiт");
}
}
class USA : People
{
public USA(string name)
{
Name = name;
}

public override void SayHello()
{
Console.WriteLine("USA" + "\t" + Name + "\t" + "Hi");
}
}


class Program
{
static void Main(string[] args)
{
List<People> Peoples = new List<People>() { new Russia("Ivan"), new Ukrain("Pavel"), new USA("Jackson") };
foreach (People p in Peoples)
p.SayHello();
Console.ReadKey();
}
}


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

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


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

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

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

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

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

RSS подписка Страничка Вконтакте Мы в Twitter

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