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

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


Наследование в Си-шарп. Конструктор базового класса
В этом уроке мы рассмотрим с вами один из базовых принципов объектно-ориентированного программирования – наследование.

Начнем рассмотрение наследования из жизненных ситуаций. Для примера, возьмем такие понятия, как человек и студент. У любого человека есть имя, рост, вес и другие общие характеристики. Студент же является частным случаем человека, у него также есть имя, рост, вес, но кроме этого, он учится в некотором ВУЗе, на определенной специальности и имеет средний балл. С точки зрения наследования, в этом случае, студент является наследником понятия человек. Еще один пример можно привести с животными. Животное - это общее понятие. Животных можно поделить на рыб, птиц и млекопитающих. Каждый из этих групп животных различаются некоторым характеристиками, но у всех них есть общие особенности животных.

А теперь перейдем к программированию

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

Объявление нового класса, который будет наследовать другой класс, выглядит так:

class [имя_класса] : [имя_базового_класса]
{
   // тело класса
}

Приведу простой пример использования наследования. На основе базового класса Животное создаются два класса Собака и Кошка, в эти два класса переходит свойство Имя животного:

class Animal
{
   public string Name { get; set; }
}
class Dog : Animal
{
   public void Guard()
   {
     // собака охраняет
   }
}
class Cat : Animal
{
   public void CatchMouse()
   {
     // кошка ловит мышь
   }
}
class Program
{
  static void Main(string[] args)
   {
     Dog dog1 = new Dog();
     dog1.Name = "Барбос"; // называем пса
     Cat cat1 = new Cat();
     cat1.Name = "Барсик"; // называем кота
     dog1.Guard(); // отправляем пса охранять
     cat1.CatchMouse(); // отправляем кота на охоту
   }
}

Вызов конструктора базового класса в Си-шарп

В базовом классе и классе-наследнике могут быть объявлены конструкторы, и тут возникает вопрос – какой конструктор за что должен отвечать, и как их вызывать. Логично будет сказать то, что конструктор базового класса будет создавать ту часть объекта, которая принадлежит базовому классу (ведь из базового класса о наследнике ничего неизвестно), а конструктор из наследника будет создавать свою часть.

Когда конструктор определен только в наследнике, то здесь всё просто – при создании объекта сначала вызывается конструктор по умолчанию базового класса, а затем конструктор наследника.

Когда конструкторы объявлены и в базовом классе, и в наследнике – нам необходимо вызывать их оба. Для вызова конструктора базового класса используется ключевое слово base. Объявление конструктора класса-наследника с вызовом базового конструктора имеет следующую структуру:

[имя_конструктора_класса-наследника] ([аргументы]) : base ([аргументы])
{
   // тело конструктора
}

В базовый конструктор передаются все необходимые аргументы для создания базовой части объекта.

Приведу пример вызова базового конструктора. Есть тот же класс Животное и класс Попугай. В классе Животное есть только свойство Имя, и конструктор, который позволяет установить это имя. В классе Попугай есть свойство Длина клюва и конструктор, в котором мы задаем эту длину. При создании объекта Попугай мы указываем два аргумента – имя и клюв, и дальше аргумент Имя передается в базовый конструктор, он вызывается, и после его работы выполнение передается конструктору класса Попугай, где устанавливается длина:

class Animal
{
   public string Name { get; set; }

   public Animal(string name)
   {
     Name = name;
   }
}
class Parrot : Animal
{
   public double BeakLength { get; set; } // длина клюва

   public Parrot(string name, double beak) : base(name)
   {
     BeakLength = beak;
   }
}
class Dog : Animal
{
  public Dog(string name) : base (name)
   {
     // здесь может быть логика создания объекта Собака
   }
}
class Program
{
   static void Main(string[] args)
  {
     Parrot parrot1 = new Parrot("Кеша", 4.2);
     Dog dog1 = new Dog("Барбос");
   }
}

Доступ к членам базового класса из класса-наследника

Здесь стоит отметить, что в классе-наследнике мы можем получить доступ к членам базового класса которые объявлены как public, protected, internal и protected internal. Члены базового класса с модификатором доступа private также переходят в класс-наследник, но к ним могут иметь доступ только члены базового класса. Например, свойство, объявленное в базовом классе, которое управляет доступом к закрытому полю, будет работать корректно в классе-наследнике, но отдельно получить доступ к этому полю из класса-наследника мы не сможем.

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

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

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


Поделиться с друзьями:
21 июл 2013 02:36
Юрец 05 ноя 2016 02:01

namespace NasledKONST
{
class Figura// родительский класс
{
int width;
int hight;

public int Width//свойство
{
get { return width; }
set { width = value; }
}
public int Hight//свойство
{
get { return hight; }
set { hight = value; }
}

public Figura( int w, int h)//родительский конструктор
{
Width = w;
Hight = h;
}

}

class DrugayaFigura : Figura// создаем новый класс на основе исходного
{
string name;
public string Name// свойство для дочернего класса
{
get { return name; }
set { name = value; }
}

public DrugayaFigura(string n, int w, int h) : base (w, h)// вызывем конструктор с использованием родительского класса
{
Name = n;
}

public int Ploshad()// метод нахождения площади фигуры
{
return Width * Hight;
}
}


class Program
{
static void Main(string[] args)
{
Console.WriteLine("Введите высоты и ширину для фигуры базового класса");

//вводим высоту и присваиваем обычной переменной
Console.WriteLine("Введите высоту");
int h = Int32.Parse(Console.ReadLine());

//вводим ширину и присваиваем обычной переменной
Console.WriteLine("Введите ширину");
int w = Int32.Parse(Console.ReadLine());

//создаем экземпляр класса и присваиваем значения через конструктор
Figura basFigName = new Figura(w,h);

Console.WriteLine("Значения высоты и ширины равны {0}, {1}", basFigName.Hight, basFigName.Width);
Console.ReadKey();
////////////////////

Console.WriteLine("Введите название, высоту и ширину для фигуры класса потомка");
//вводим название и присваиваем обычной переменной
Console.WriteLine("Введите название фигуры");
string nm = Console.ReadLine();

//вводим высоту и присваиваем обычной переменной
Console.WriteLine("Введите высоту");
int hh = Int32.Parse(Console.ReadLine());

//вводим ширину и присваиваем обычной переменной
Console.WriteLine("Введите ширину");
int ww = Int32.Parse(Console.ReadLine());

DrugayaFigura drFig = new DrugayaFigura(nm, ww, hh);// создаем экземпляр класса наследника, используя конструктор родительского класса

Console.WriteLine("Мы создали {0} с высотой {1} и шириной {2} \nПлощадь этой фигуры равна {3}", drFig.Name, drFig.Hight, drFig.Width, drFig.Ploshad());
Console.ReadKey();

}
}
}


Баринов ФИлипп 05 авг 2016 23:00
Специфическая логика рисования - это имеется ввиду, что способ рисования каждой фигуры - разный, То есть нахождение площади - смысл один, реализации разные.

Александр Михалев 18 май 2016 19:51
Евген, насколько я знаю, можно. Только наследник который наследуется у другого наследника не будет иметь возможности получить доступ к полям базового класса, а лишь к тем которые были объявлены в первом наследнике. Я могу ошибаться, если что пусть меня поправят, но по моему так.

Евген 01 май 2016 12:48
У меня есть есть вопрос: можно ли создать класс наследник от класса, который сам наследник?

bas-tion.ru 28 апр 2016 19:46
Посмотрел выполненные задания, похоже не я один не понял. Кто-то площадь вычисляет, кто-то просто прописал метод CreateSomething()

bas-tion.ru 28 апр 2016 19:38
Не могу понять, что значит следующее выражение из домашнего задания:

...добавьте метод Нарисовать, в котором могла бы быть специфическая логика рисования фигуры...

Что это за "специфическая логика"?

Если я попрошу кого-нибудь:
"Мой друг, нарисуйте мне круг методом, в котором необходимо использовать особую (специфическую) логику, пожалуйста."
Что в ответ я услышу?

Максим 26 апр 2016 23:32
Вот полная программа с интерактивным меню.
На исключения уже времени нету =)

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

namespace Lessons_3
{
class Figure
{
public double CenterX { set; get; }
public double CenterY { set; get; }
public Figure(double centerx, double centery)
{
CenterX = centerx;
CenterY = centery;
}
}

class Circle : Figure
{
public double Range { set; get; }
public Circle(double centerx, double centery, double range) : base(centerx, centery)
{
Range = range;
}
}
class Triangle : Figure
{
public double Side_one { set; get; }
public double Side_two { set; get; }
public double Side_three { set; get; }
public Triangle(double centerx, double centery, double side_one, double side_two, double side_three) : base(centerx, centery)
{
Side_one = side_one;
Side_two = side_two;
Side_three = side_three;
}
}
class Program
{
public static void SetCircle(Circle[] Figure, Triangle[] Triangle)
{
bool Set = false;
double CenterX;
double CenterY;
double Range;
Console.Write("Введите X координату центра окружности : ");
CenterX = Convert.ToDouble(Console.ReadLine());
Console.Write("Введите Y координату центра окружности : ");
CenterY = Convert.ToDouble(Console.ReadLine());
Console.Write("Введите величину радиуса окружности : ");
Range = Convert.ToDouble(Console.ReadLine());
Console.Write("\n\n\n");
Circle CircleNew = new Circle(CenterX, CenterY, Range);
for (byte i = 0; i < Figure.Length; i++)
{
if (Figure[i] == null && Set == false)
{
Figure[i] = CircleNew;
Set = true;
}
}
Menu(Figure, Triangle);
}
public static void DrawCircle(Circle[] Figure, Triangle[] Triangle)
{
Console.Write("\n\n\n");
for (byte i = 0; i < Figure.Length; i++)
{
if (Figure[i] != null)
{
Console.WriteLine("Окружность # " + (i+1) + ".");
Console.WriteLine("X координата центра : " + Figure[i].CenterX + ".");
Console.WriteLine("Y координата центра : " + Figure[i].CenterY + ".");
Console.WriteLine("Радиус окружности : " + Figure[i].Range + ".\n\n\n");
}
}
Menu(Figure, Triangle);
}
public static void SetTriangle(Triangle[] Figure, Circle[] Circle)
{
bool Set = false;
double CenterX;
double CenterY;
double SideOne;
double SideTwo;
double SideThree;
Console.Write("Введите X координату центра треугольника : ");
CenterX = Convert.ToDouble(Console.ReadLine());
Console.Write("Введите Y координату центра треугольника : ");
CenterY = Convert.ToDouble(Console.ReadLine());
Console.Write("Введите величину первой стороны треугольника : ");
SideOne = Convert.ToDouble(Console.ReadLine());
Console.Write("Введите величину второй стороны треугольника : ");
SideTwo = Convert.ToDouble(Console.ReadLine());
Console.Write("Введите величину третьей стороны треугольника : ");
SideThree = Convert.ToDouble(Console.ReadLine());
Console.Write("\n\n\n");
Triangle TriangleNew = new Triangle(CenterX, CenterY, SideOne, SideTwo, SideThree);
for (byte i = 0; i < Figure.Length; i++)
{
if (Figure[i] == null && Set == false)
{
Figure[i] = TriangleNew;
Set = true;
}
}
Menu(Circle, Figure);
}
public static void DrawTriangle(Triangle[] Figure, Circle[] Circle)
{
Console.Write("\n\n\n");
for (byte i = 0; i < Figure.Length; i++)
{
if (Figure[i] != null)
{
Console.WriteLine("Треугольник # " + (i + 1) + ".");
Console.WriteLine("X координата центра : " + Figure[i].CenterX + ".");
Console.WriteLine("Y координата центра : " + Figure[i].CenterY + ".");
Console.WriteLine("Величина 1 стороны : " + Figure[i].Side_one + ".");
Console.WriteLine("Величина 2 стороны : " + Figure[i].Side_two + ".");
Console.WriteLine("Величина 3 стороны : " + Figure[i].Side_three + ".\n\n\n");
}
}
Menu(Circle, Figure);
}
public static void DrawFigure(Circle[] Circle, Triangle[] Triangle)
{
Console.Write("\n\n\n");
for (byte i = 0; i < Circle.Length; i++)
{
if (Circle[i] != null)
{
Console.WriteLine("Окружность # " + (i + 1) + ".");
Console.WriteLine("X координата центра : " + Circle[i].CenterX + ".");
Console.WriteLine("Y координата центра : " + Circle[i].CenterY + ".");
Console.WriteLine("Радиус окружности : " + Circle[i].Range + ".\n\n\n");
}
}
for (byte i = 0; i < Triangle.Length; i++)
{
if (Triangle[i] != null)
{
Console.WriteLine("Треугольник # " + (i + 1) + ".");
Console.WriteLine("X координата центра : " + Triangle[i].CenterX + ".");
Console.WriteLine("Y координата центра : " + Triangle[i].CenterY + ".");
Console.WriteLine("Величина 1 стороны : " + Triangle[i].Side_one + ".");
Console.WriteLine("Величина 2 стороны : " + Triangle[i].Side_two + ".");
Console.WriteLine("Величина 3 стороны : " + Triangle[i].Side_three + ".\n\n\n");
}
}
Menu(Circle, Triangle);
}
public static void Menu(Circle[] Circle, Triangle[] Triangle)
{
bool Correctly = true;
byte Choice = 0;
Console.WriteLine("1 - Обозначить окружность.");
Console.WriteLine("2 - Обозначить треугольник.");
Console.WriteLine("3 - Нарисовать окружность.");
Console.WriteLine("4 - Нарисовать треугольник.");
Console.WriteLine("5 - Нарисовать все фигуры.");
Console.WriteLine("6 - Выход из программы.\n\n\n");
do
{
Choice = Convert.ToByte(Console.ReadLine());
Correctly = true;
switch (Choice)
{
case 1: SetCircle(Circle, Triangle); break;
case 2: SetTriangle(Triangle, Circle); break;
case 3: DrawCircle(Circle, Triangle); break;
case 4: DrawTriangle(Triangle, Circle); break;
case 5: DrawFigure(Circle, Triangle); break;
case 6: Console.WriteLine("Благодарим за использование нашего ПО.\nЖдем вас снова!"); Console.ReadKey(); break;
default: Console.WriteLine("Нет такого пункта в меню , введите ещё раз."); Correctly = false; break;
}
} while (Correctly == false);
}
static void Main(string[] args)
{
Circle[] circle = new Circle[100];
Triangle[] triangle = new Triangle[100];
Console.WriteLine("Приветствуем вас в нашей программе для консольного рисования фигур!\n");
Menu(circle, triangle);
}
}
}


Рома 27 мар 2016 15:34

using System;

namespace ConsoleApplication15
{
class geomf
{
public int center { get; set; }

public geomf(int x,int y)
{
center = x;
center = y;
}
}
class Elipse : geomf
{
public int r;
public Elipse(int x,int y) : base(x, y)
{
Console.Write("Radius of elipse: ");
r = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("This is eslipse with radius : " + r + " at (" + x + " / " + y+")");
Console.ReadLine();
}
}
class Sqaure : geomf
{
public int s;
public int a;
public Sqaure(int x, int y) : base(x, y)
{
Console.Write("Enter side of a square: ");
a = Convert.ToInt32(Console.ReadLine());
s = a * a;
Console.WriteLine("This is square with side: " + a + " at (" + x + " / " + y+") and total " + s + "." );

}
}
class Program
{
public static int GetCoordainates()
{
Console.Write("Enter coorditates : " );
int Coordinate = Convert.ToInt32(Console.ReadLine());
return (Coordinate);
}
static void Main(string[] args)
{

int X = GetCoordainates();
int Y = GetCoordainates();
Sqaure sq = new Sqaure(X, Y);
Elipse el = new Elipse(X, Y);
Console.ReadKey();



}
}
}


dmitry_zon 17 фев 2016 16:13

namespace Lesson17
{
class GeometricObj
{
public double AxisX;
public double AxisY;
public GeometricObj (double OsX, double OsY)
{
OsX=AxisX;
OsY=AxisY;
}
}
class Circle:GeometricObj
{
public double Radius;
public Circle(double AxisX, double AxisY):base(AxisX, AxisY)
{
Radius = AxisX > AxisY ? AxisX / AxisY : AxisY / AxisX;
Console.WriteLine("This is a circle with radius " + this.Radius + " whith center at " + AxisX + "/" + AxisY);
}
}
class Square:GeometricObj
{
public double TotalSquare;
public Square(double AxisX, double AxisY):base(AxisX, AxisY)
{
TotalSquare = AxisX * AxisY;
Console.WriteLine("This is a squre with a side length " + Math.Sqrt(TotalSquare) + " and central coordinates " + AxisX + "/" + AxisY);
}
}
class Program
{
public static int GetCoordinates()
{
Console.WriteLine("Enter a coordinate");
int Coordinate = Convert.ToInt32(Console.ReadLine());
return Coordinate;
}
static void Main(string[] args)
{
int X= GetCoordinates();
int Y= GetCoordinates();
Circle Krug = new Circle(X, Y);
Console.ReadKey();
Square Kvadrat = new Square(X, Y);
Console.ReadKey();
}
}
}

voloshyn-i 15 фев 2016 01:19
class Geometric
{
public double Centre { get; set; }

public Geometric (double centre) // конструктор
{
Centre = centre;
}
}
class Triangle : Geometric
{
public double Vertices { get; set; } // вершины
public Triangle(double centre, double vert)
: base(centre)
{
Vertices = vert;
}
public void Draw(double a, double b, double c)
{
}

}
class Circle : Geometric
{
public double Radius { get; set; } // вершины
public Circle(double centre, double rad)
: base(centre)
{
Radius = rad;
}

public void Draw(double centre, double rad)
{
}
}
class Program
{
static void Main(string[] args)
{
Circle c1 = new Circle(2, 4.2);
Triangle t1 = new Triangle(3, 5);
Console.WriteLine(t1.Centre);
Console.WriteLine(t1.Vertices);

t1.Draw(1, 2, 5);


Console.ReadKey();
}
}

Kolsky 27 дек 2015 12:50
Усложнил себе задачу, решил попробовать отрисовать символьные фигуры) Результат не из лучших.

/*
* Сделано в SharpDevelop.
* Пользователь: Kolsky
* Дата: XX.XX.XXXX
* Время: XX:YY
*/
using System;

namespace h
{
class GeoShape
{
public double area;
}
class Circle:GeoShape
{
public Circle(int r)//Считает площадь круга
{
this.area=Math.PI*r;
}
public void Draw(int r)
{
string s="";
for (int i=0;i<=2*r+1;i++)
{
for (int u=0;u<=2*r+1;u++)
{
s+=Convert.ToInt32(Math.Sqrt(Math.Pow(r-i+1,2)+Math.Pow(r-u+1,2)))<=r?"+":" ";
}
s+="\r\n";
}
Console.WriteLine(s);
}
}
class Triangle:GeoShape
{
public Triangle(int alpha,double a,double b)//Считает площадь из значений угла и 2-х прилежащих сторон
{
this.area=0.5*a*b*Math.Sin(alpha*Math.PI/180);
}
public void Draw(int a,int ah,int h)
{
int bh=a-ah+1;
string s="";
for(int u=1;u<=a;u++) if (u==ah) s+="+";else s+=" ";
for(int i=h-1;i>=1;i--)
{
s+="\r\n";
for(int u=1;u<ah;u++)
{
if ((float)i/u<=(float)h/ah) s+="+"; else s+=" ";
}
for(int u=bh;u>=1;u--)
{
if ((float)i/u<=(float)h/bh) s+="+"; else s+=" ";
}
}
Console.WriteLine(s);
}
}
class Program
{
public static void Main(string[] args)
{
try
{
int y=Convert.ToInt32(Console.ReadLine());//Радиус окружности
Circle A1=new Circle(y);
A1.Draw(y);//Рисуем круг
int a=Convert.ToInt32(Console.ReadLine());//Длина основания треугольника
int ah=Convert.ToInt32(Console.ReadLine());//Расстояние от левого края треугольника до точки пересечения a и h
int h=Convert.ToInt32(Console.ReadLine());//Высота, проведённая к основанию
Triangle C1=new Triangle(a,ah,h);
C1.Draw(a,ah,h);//Рисуем треугольник
Console.ReadKey(true);
}
catch(Exception)
{
Console.WriteLine("Йибриф бай льфуст ут рихфнис");
Console.ReadKey(true);
}
}
}
}

Max64 20 ноя 2015 00:45
Подскажите,пожалуйста. Почему у меня не подсчитывается значение площади треугольника? И какие есть недочеты?

class GeoFigure
{
public double centre1{ get; set;}
public double centre2 { get; set; }
public GeoFigure()
{
}
public GeoFigure(double centre1, double centre2)
{
this.centre1 = centre1;
this.centre2 = centre2;
}
}
class Triangle : GeoFigure
{
public double height { get; set; }
public double osnovanie{ get; set; }
public Triangle(double height, double osnovanie)
{
this.height = height;
this.osnovanie = osnovanie;
}
public double GetSquare()
{
return 1 / 2 * (height * osnovanie);
}
public void ToDraw()
{
Console.WriteLine("Треугольник с высотой {0} и основанием {1}", height, osnovanie);
}
}
class Circle : GeoFigure
{
public double diameter { get; set; }
public Circle(double centre1, double centre2, double diameter) : base(centre1, centre2)
{
this.diameter = diameter;
}
public double GetRadius()
{
return diameter / 2;
}
public void ToDraw()
{
Console.WriteLine("Окружность с диаметром {0}", diameter);
}

}
class Program
{
static void Main(string[] args)
{
Triangle triangle1 = new Triangle(3,20);
Circle circle1 = new Circle(5,2,4);
Console.WriteLine("Площадь треугольника равна = {0}",triangle1.GetSquare());
Console.WriteLine("Радиус окружности = {0}", circle1.GetRadius());
triangle1.ToDraw();
circle1.ToDraw();
Console.ReadLine();
}
}

Dipe 02 ноя 2015 11:36
С математикой не сильно дружу, по этому сделал на более понятном для себя примере. С автомобилями


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

namespace ConsoleApplication1
{
class Car
{
private string Model { get; set; }
private string Mark { get; set; }
private string Variant { get; set; }
public Car(string mark, string model)
{
Mark = mark;
Model = model;
Console.WriteLine("Mark: " + Mark);
Console.WriteLine("Model: " + Model);
}
public Car(string variant)
{
Variant = variant;
Console.WriteLine("Variant of car: " + Variant);
}
}

class VW : Car
{
public int Year{get; set;}
public VW(string mark, string model, int year)
: base(mark, model)
{
Year = year;
Console.WriteLine("Made in: " + Year);
}
}

class Porshe : Car
{
public Porshe(string mark, string model)
: base(mark, model)
{ }
}

class Ferrari : Car
{
public Ferrari(string mark, string model)
: base(mark, model)
{

}
}

class BMW : Car
{
public int Year { get; set; }

public BMW(string mark, string model, int year)
: base(mark, model)
{
Year = year;
Console.WriteLine("Made in: " + Year);
}
public BMW(string variant)
: base(variant)
{

}
}


class Program
{
static void Main(string[] args)
{
VW auto = new VW("VW", "Passat", 2013);
Console.WriteLine();
Porshe autoPorshe = new Porshe("Porshe", "911");
Console.WriteLine();
Ferrari autoFerrari = new Ferrari("Ferrari", "");
Console.WriteLine();
BMW autoBMW = new BMW("BMW", "z-150", 1983);
BMW autoB = new BMW("Coupe");

Console.ReadLine();
}
}
}


Влад 19 сен 2015 23:23

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

namespace ConsoleApplication6
{
class Figure
{
protected string Name { get; set; }
protected int CentreX { get; set; }
protected int CentreY { get; set; }



public Figure(string name, int x, int y)
{
CentreX = x;
CentreY = y;
Name = name;

}
}

class Triangle : Figure
{
public int Height { get; set; }


public Triangle(string name, int x, int y, int height)
: base(name, x, y)
{

Height = height;

Console.WriteLine("Фигура - {0}, Центр = X({1}),Y({2}), Высота = {3} ", name, x, y, height );

}


}

class Square : Figure
{
public int Radius { get; set; }


public Square(string name, int x, int y, int radius)
: base(name, x, y)
{

Radius = radius;

Console.WriteLine("Фигура - {0}, Центр = X({1}),Y({2}), Радиус = {3} ", name, x, y, radius);

}


}

class Program
{
static void Main(string[] args)
{

Triangle triangle = new Triangle("Треугольник", 4, 4, 10);
Console.WriteLine(new string('-', 50));
Square square = new Square("Квадрат", 3, 7, 5);



Console.ReadKey();
}
}
}

Влад 19 сен 2015 23:22
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication6
{
class Figure
{
protected string Name { get; set; }
protected int CentreX { get; set; }
protected int CentreY { get; set; }



public Figure(string name, int x, int y)
{
CentreX = x;
CentreY = y;
Name = name;

}
}

class Triangle : Figure
{
public int Height { get; set; }


public Triangle(string name, int x, int y, int height)
: base(name, x, y)
{

Height = height;

Console.WriteLine("Фигура - {0}, Центр = X({1}),Y({2}), Высота = {3} ", name, x, y, height );

}


}

class Square : Figure
{
public int Radius { get; set; }


public Square(string name, int x, int y, int radius)
: base(name, x, y)
{

Radius = radius;

Console.WriteLine("Фигура - {0}, Центр = X({1}),Y({2}), Радиус = {3} ", name, x, y, radius);

}


}

class Program
{
static void Main(string[] args)
{

Triangle triangle = new Triangle("Треугольник", 4, 4, 10);
Console.WriteLine(new string('-', 50));
Square square = new Square("Квадрат", 3, 7, 5);



Console.ReadKey();
}
}
}

ROOT 23 авг 2015 10:25
//Домашнее задание//
Слегка усложнил себе задачу, добавив больше фигур и методов.

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

namespace Work
{
class GeometricalFigures
{
protected string name { get; set; }
protected int Center_x { get; set; }
protected int Center_y { get; set; }
public GeometricalFigures(string Name, int x,int y)
{
Center_x = x;
Center_y = y;
name = Name;
}
}
class Circle : GeometricalFigures
{
public int Radius;
public int radius
{
get
{
return Radius;
}
set
{
Radius = value;
}
}
public Circle(int rad,int x, string Name, int y) : base(Name,x,y)
{
radius = rad;
}
public double CircleLength { get; set; } // длина оркужности
public double CircleS { get; set; } // площадь окружности
public double CircleAngle; // угол окружности
public double ArcLength { get; set; } // длина дуги
public double ArcS { get; set; } // площадь кругового сектора
public double circleangle // свойство для угла
{
get
{
return CircleAngle;
}
set
{
if (value < 1)
CircleAngle = 1;
else if (value > 359)
CircleAngle = 359;
else
CircleAngle = value;
}
}
public Circle(int rad,int x, string Name, int y, double circlength, double circleangle, double arclength,double arcs,double circles) : base(Name,x,y)
{
CircleLength = circlength;
CircleS = circles;
CircleAngle = circleangle;
ArcLength = arclength;
ArcS = arcs;
}
public void Draw1()
{
Console.Clear();
Console.WriteLine("--------------------------------------");
Console.WriteLine("Вы создали окружность с именем \"{0}\", радиусом {1} и координатами центра(x:{2},y:{3}).\nВоспользовавшись дополнительными возможностями создания оркужности,\nстали доступны следующие данные:\nДлина окружности = {4}\nПлощадь окружности = {5}\nЗаданный угол(для нахождения значений других параметров)= {6}\nДлина дуги = {7}\nПлощадь кругового сектора = {8}", name, radius, Center_x, Center_y, CircleLength, CircleS, CircleAngle, ArcLength, ArcS);
Console.WriteLine("--------------------------------------");
}
public void Draw2()
{
Console.Clear();
Console.WriteLine("--------------------------------------");
Console.WriteLine("Вы создали окружность с именем \"{0}\", радиусом {1} и координатами центра(x:{2},y:{3}).",name, radius, Center_x, Center_y);
Console.WriteLine("--------------------------------------");
}
}
class Triangle: GeometricalFigures
{
public int A { get; set; }
public int B { get; set; }
public int C { get; set; }
public Triangle(string Name, int a,int b,int c,int x,int y) : base(Name,x,y)
{
A = a;
B = b;
C = c;
}
public void Draw()
{
Console.Clear();
Console.WriteLine("--------------------------------------");
Console.WriteLine("Вы создали треугольник с именем \"{0}\", сторонами {1},{2} и {3} и координатами центра(x:{4},y:{5}).",name,A,B,C,Center_x,Center_y);
Console.WriteLine("--------------------------------------");
}
}
class Square : GeometricalFigures
{
public int A { get; set; }
public int S { get; set; }
public Square(string Name, int a,int s,int x, int y) : base (Name,x,y)
{
A = a;
S = s;
}
public void Draw()
{
Console.Clear();
Console.WriteLine("--------------------------------------");
Console.WriteLine("Вы создали квадрат c именем \"{4}\" со стороной {0}, площадью {1} и координатами центра (x:{2},y:{3}).",A,S,Center_x,Center_y,name);
Console.WriteLine("--------------------------------------");
}
}
class Program
{
public static void Error()
{
Console.Clear();
Console.WriteLine("ОШИБКА! Перейдите в меню и выберите пункт действия");
Console.ReadKey();
Console.Clear();
}
public static void Work(int f)
{

try
{
Console.Clear();
Console.Write("Введите координаты центра:\nx: ");
int sel_x = Convert.ToByte(Console.ReadLine());
Console.Write("y: ");
int sel_y = Convert.ToByte(Console.ReadLine());
Console.Write("Введите имя фигуры: ");
string sel_name = Console.ReadLine();
if (f == 1)
{
Console.Write("Введите радиус: ");
int sel_rad = Convert.ToByte(Console.ReadLine());
Console.WriteLine("\nДля создания окружности в программе имеется расширенный спектр возможностей!\nЕсли вы желаете им воспользоваться, нажмите 1\nЖелаете создать круг со стандартными параметрами, нажмите 2");
int selection = Convert.ToInt32(Console.ReadLine());
if (selection == 1)
{
Console.Clear();
Console.WriteLine("Загрузка дополнительных параметров...\n\n\t\t\t\t...\n\n\n\n\nНажмите любую клавишу...");
Console.ReadKey();
Console.Clear();
Console.Write("Введите угол для окружности(он необходим для дальнейшего использования расширенных возможностей): ");
double sel_CircleAngle = Convert.ToDouble(Console.ReadLine());
double sel_CircleLength = 2 * Math.PI * sel_rad;
double sel_CircleS = Math.PI * sel_rad * sel_rad;
double sel_ArcLength = (Math.PI * sel_rad * sel_CircleAngle) / 180;
double sel_ArcS = (Math.PI * sel_rad * sel_rad * sel_CircleAngle) / 360;
Circle new_cr2 = new Circle(sel_rad, sel_x, sel_name, sel_y,sel_CircleLength,sel_CircleAngle,sel_ArcLength,sel_ArcS,sel_CircleS);
new_cr2.Draw1();
}
else if (selection == 2)
{
Circle new_cr = new Circle(sel_rad, sel_x, sel_name, sel_y);
new_cr.Draw2();
}
}
else if (f == 2)
{
Console.Write("Задайте значение сторон треугольника\n1-ая: ");
int sel_a = Convert.ToByte(Console.ReadLine());
Console.Write("2-ая: ");
int sel_b = Convert.ToByte(Console.ReadLine());
Console.Write("3-я: ");
int sel_c = Convert.ToByte(Console.ReadLine());
Triangle new_tr = new Triangle(sel_name, sel_a, sel_b, sel_c, sel_x, sel_y);
new_tr.Draw();
}
else if (f == 3)
{
Console.Write("Введите сторону квадрата: ");
int sel_a = Convert.ToByte(Console.ReadLine());
int sel_s = sel_a * sel_a;
Square new_sq = new Square(sel_name, sel_a, sel_s, sel_x, sel_y);
new_sq.Draw();
}
Console.ReadLine();
Console.Clear();
MainMenu();
}
catch(Exception)
{
Error();
MainMenu();
}
}
public static void MainMenu()
{
try
{
Console.Clear();
Console.WriteLine("\t\t\t\tГлавное меню\n---------------------------\n1 окружность\n2 треугольник\n3 квадрат\n4 выход");
int select = Convert.ToInt32(Console.ReadLine());
if (select == 1)
{
Work(1);
Console.ReadKey();
}
else if (select == 2)
{
Work(2);
Console.ReadKey();
}
else if (select == 3)
{
Work(3);
Console.ReadKey();
}
else if (select == 4)
{
return;
}
else
{
Error();
MainMenu();
}
}
catch (Exception)
{
Error();
MainMenu();
}
}
static void Main(string[] args)
{
MainMenu();
}
}
}

Александр 10 авг 2015 16:40
Спасибо за урок!

namespace ConsoleApplication22_Sharp_Class_4_NASLE
{
class Program
{
static void Main(string[] args)
{
Ellipse ellipse = new Ellipse(50, 10, 10);
Console.WriteLine("{0},{1},{2}",ellipse.radius,ellipse.x,ellipse.y);
Console.ReadKey();
Console.Clear();
Triangle triangle = new Triangle(true, 20, 25);
Console.WriteLine("{0},{1},{2}", triangle.rectangular, triangle.x, triangle.y);
Console.ReadKey();
}
}
class Geometric_Figur
{
internal int x, y;

public Geometric_Figur(int x, int y) //координаты центра геометрической фигуры
{
this.x = x;
this.y = y;
}
}
class Ellipse : Geometric_Figur
{
public int radius {get; set;}

public Ellipse(int rad, int x, int y) //радиус окружности и координаты ее центра
: base(x, y)
{
radius = rad;
}
}
class Triangle : Geometric_Figur
{
public bool rectangular {get; set;}

public Triangle(bool rect, int x, int y) //прямоугольный ли треугольник и координаты его центра
: base(x, y)
{
rectangular = rect;
}
}
}

Очень Юра 22 июл 2015 18:47
Спасибо за урок. Из-за проверок довольно громоздко получилось.

class GeomFigure
{
protected int Center_x { get; set; }
protected int Center_y { get; set; }
protected GeomFigure(int x, int y)
{
this.Center_x = x;
this.Center_y = y;
}
}
class Circle : GeomFigure
{
private int radius;
public int Radius
{
get
{
return radius;
}
set
{
if (value == 0)
radius = 1;
else if (value < 0)
radius *= -1;
else radius = value;
}
}
public Circle(int x, int y, int radius) : base(x,y)
{
Radius = radius;
}
public void Draw()
{
// рисую круг
Console.WriteLine("-----------------------------");
Console.Write("Мы создали круг с координатами центра (x:{0},y:{1}) и радиусом: {2}", Center_x, Center_y, Radius);
}
}
class Triangle : GeomFigure
{
private int edgelength;
public int EdgeLength
{
get
{
return edgelength;
}
set
{
if (value == 0)
edgelength = 1;
else if (value < 0)
edgelength *= -1;
else edgelength = value;
}
}
public Triangle(int x, int y, int edge) : base(x, y)
{
EdgeLength = edge;
}
public void Draw()
{
// нахожу координаты вершин правильного треугольника
// относительно его центра для рисования
double bx = Center_x;
double by = Center_y + (EdgeLength / 2 * Math.Sqrt(3));
double cx = Center_x + (EdgeLength / 2);
double cy = Center_y - (EdgeLength / Math.Sqrt(3));
double ax = Center_x - (EdgeLength / 2);
double ay = cy;
Console.WriteLine("-----------------------------");
Console.WriteLine("Мы создали равносторонний треугольник\nс координатами центра: (x:{0},y:{1})\nдлиной ребра: {2}", Center_x, Center_y, EdgeLength);
Console.Write("координатами вершин: A (x:{0:0.##},y:{1:0.##}), B (x:{2:0.##},y:{3:0.##}), C (x:{4:0.##},y:{5:0.##})", ax, ay, bx, by, cx, cy);
}
}
class Program
{
public static void ErrorMessage () //функция обработки ошибок
{
Console.WriteLine("Ошибка ввода данных! Нажмите любую клавишу и выберите номер пункта.");
Console.ReadKey();
Console.Clear();
}
public static void ConsoleWork(bool iscircle) //функция операций
{
Console.WriteLine("Укажите координаты центра:");
Console.Write("x: ");
int temp_x = Convert.ToByte(Console.ReadLine());
Console.Write("y: ");
int temp_y = Convert.ToByte(Console.ReadLine());
if (iscircle)
{
Console.Write("укажите радиус: ");
int temp_r = Convert.ToByte(Console.ReadLine());
Circle circle1 = new Circle(temp_x, temp_y, temp_r);
circle1.Draw();
}
else if (!iscircle)
{
Console.Write("укажите длину ребра: ");
int temp_s = Convert.ToByte(Console.ReadLine());
Triangle triangle1 = new Triangle(temp_x, temp_y, temp_s);
triangle1.Draw();
}
Console.ReadLine();
Console.Clear();
}
public static void ConsoleMenu () //рекурсивная функция основного меню
{
bool circle;
byte punct;
try
{
do
{
Console.WriteLine("Выберите фигуру для создания:");
Console.WriteLine("-----------------------------");
Console.WriteLine("1 круг\n2 треугольник");
punct = Convert.ToByte(Console.ReadLine());
if (punct == 1)
ConsoleWork(circle = true);
else if (punct == 2)
ConsoleWork(circle = false);
else
{
ErrorMessage();
}
}
while (punct != 1 || punct != 2);
}
catch (Exception)
{
ErrorMessage();
ConsoleMenu();
}
}
static void Main(string[] args)
{
ConsoleMenu();
}
}

AlPer 02 июл 2015 22:14

abstract class GeometricalFigure
{
protected int X { get; set; }
protected int Y { get; set; }

public GeometricalFigure(int x, int y)
{
X = x;
Y = y;
}

abstract public void Draw();
}

class Rectangle : GeometricalFigure
{
protected int RadiusVp { get; set; }
int Ax, Ay;
int Bx, By;
int Cx, Cy;

public Rectangle(int x, int y, int radiusVP, int ax, int ay, int bx, int by,int cx, int cy)
: base(x, y)
{
RadiusVp = radiusVP;
Ax = ax; Ay = ay;
Bx = bx; By = by;
Cx = cx; Cy = cy;
}
override public void Draw()
{
Console.WriteLine("Я рисую треугольник. \nКоординаты центра вписанной окружности {0}, {1} с радиусом {2}.", X, Y, RadiusVp);
Console.WriteLine("Координаты вершин треугольника: "+
string.Format("\nТочка A: {0},{1}\nТочка B: {2},{3}\nТочка C: {4},{5}", Ax, Ay, Bx, By, Cx, Cy));
}
}

class Circle : GeometricalFigure
{
protected int Radius { get; set; }

public Circle(int x, int y, int radius)
: base(x, y)
{
Radius = radius;
}

override public void Draw()
{
Console.WriteLine("Я рисую окружность с координатами: {0}, {1} и радиусом {2}.", X, Y, Radius);
}
}

class Programm
{
static void PrintMenu()
{
Console.Clear();
Console.WriteLine("Выберите фигуру: \n1. Окружность\n2. Треугольник");

switch (Console.ReadLine())
{
case "1":
Circle circle1 = new Circle(20, 34, 11);
circle1.Draw();
break;
case "2":
Rectangle rectangle1 = new Rectangle(20, 34, 11, 1, 2, 3, 4, 5, 6);
rectangle1.Draw();
break;
default:
Console.WriteLine("Не то нажали");
break;
}
}

static void Main()
{
PrintMenu();
Console.ReadLine();
}
}

Юлия 15 июн 2015 04:02
{
class Figure
{

public int X;
public int Y;

public Figure()
{ X = 0; Y = 0; }
public Figure(int X, int Y)
{
this.X = X; this.Y = Y;
}
}
class Round : Figure
{
public int r { get; set; }
public Round(int X,int Y, int r) {}
public void Paint() { }


}

class Treug : Figure
{
public int a { get; set; } //a,b,c - длины сторон треугольника
public int b { get; set; }
public int c { get; set; }
public Treug(int X,int Y, int a, int b, int c) { }
public void Paint() { }
}


class Program
{
static void Main(string[] args)
{
Round Round1 = new Round(5,4,6);
Treug Treug1 = new Treug(6,8,10,12,5);
Round1.Paint();
Treug1.Paint();
}
}
}

Александр_Бугай 14 май 2015 12:36
class Figure
{
public int centerX;
public int centerY;
public int square;
public Figure()
{
centerX = Convert.ToInt32(Console.ReadLine());
centerY = Convert.ToInt32(Console.ReadLine());
}

}
class Triangle : Figure
{
public int angle;
internal void Draw()
{
}
}
class Circle : Figure
{
public int radius;
internal void Draw()
{
}
}

class Program
{
static void Main(string[] args)
{
Triangle myTriangle = new Triangle();
Circle myCircle = new Circle();

}
}

phoenixpakko 24 апр 2015 17:09
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
/* Создайте базовый класс Геометрическая фигура, предусмотрите в нем общие поля/свойства, например координаты центра фигуры,
* с помощью конструктора должна быть возможность задать центр. На базе этого класса создайте два новых – Треугольник и Окружность.
* В этих классах должны быть свои особые поля, например радиус для окружности. В оба класса добавьте метод Нарисовать, в котором
* могла бы быть специфическая логика рисования фигуры. Создайте объекты треугольник и окружность.*/
namespace ConsoleApplication1
{
/* Описание класса ГЕОМ.ФИГУРА */
class GeometricFigure
{
protected int centerX { get; set; } // Координаты центра Х
protected int centerY { get; set; } // Координаты центра Y

protected GeometricFigure() // Конструктор для неопределенной фигуры
{
centerX = 0;
centerY = 0;
}
protected GeometricFigure(int centerX, int centerY) // Конструктор для фигуры с определенным центром
{
this.centerX = centerX;
this.centerY = centerY;
}
}
/* Конец описания класса ГЕОМ.ФИГУРА */

/* Описание класса ТРЕУГОЛЬНИК */
class Triangle : GeometricFigure
{
internal double side_A_Length { get; set; } //Длинна стороны А
internal double side_B_Length { get; set; } //Длинна стороны В
internal double side_C_Length { get; set; } //Длинна стороны С
internal byte angle_A { get; set; } //Угол А
internal byte angle_B { get; set; } //Угол В
internal byte angle_C { get; set; } //Угол С

internal Triangle() : base() // Конструктор для неопределенного (с единичными сторонами) треугольника с центром в точке (0,0)
{
side_A_Length = 1;
side_B_Length = 1;
side_C_Length = 1;
angle_A = 60;
angle_B = 60;
angle_C = 60;
}
internal Triangle(int centerX, int centerY, double sA, double sB, double sC, byte aA, byte aB, byte aC) : base(centerX, centerY)
// Конструктор для определенного треугольника с указанным центром, сторонами и углами
{
this.side_A_Length = sA;
this.side_B_Length = sB;
this.side_C_Length = sC;
this.angle_A = aA;
this.angle_B = aB;
this.angle_C = aC;
}

internal void Draw() // Простой метод (доступ к полям объекта) рисования треугольника
{
Console.WriteLine("Рисуем треугольник с центром в точке ({0},{1})", centerX, centerY);
Console.WriteLine("Рисуем одну сторону, длинной {0} и угол {1} градусов", side_A_Length, angle_A);
Console.ReadKey();
Console.WriteLine("Рисуем вторую сторону, длинной {0} и угол {1} градусов", side_B_Length, angle_B);
Console.ReadKey();
Console.WriteLine("Рисуем третью сторону, длинной {0} и угол {1} градусов", side_C_Length, angle_C);
Console.WriteLine("Треугольник готов");
Console.ReadKey();
}
}
/* Конец описания класса ТРЕУГОЛЬНИК */

/* Описание класса КРУГ */
class Circle : GeometricFigure
{
internal double radius { get; set; } // Радиус круга

internal Circle()
: base() // Конструктор для неопределенного круга с центром в точке (0,0) и нулевым радиусом
{
radius = 0;
}

internal Circle(double radius, int centerX, int centerY) : base (centerX, centerY)
// Конструктор для определенного круга с указанным центром и указанным заранее радиусом
{
this.radius = radius;
}
internal void Draw() // Простой метод (доступ к полям объекта) рисования круга
{
Console.WriteLine("Рисуем круг радиусом {2}, с центром в точке x={0}, y={1}", centerX, centerY, radius);
Console.WriteLine("Круг готов");
Console.ReadKey();
}
}
/* Конец описания класса КРУГ */

/* Основной раздел программы */
class Program
{
static void Main(string[] args)
{
Circle Krug1 = new Circle(); // Создаем простой круг
Triangle Treugolnik1 = new Triangle(); // Создаем простой треугольник
Circle Krug2 = new Circle(5, 10, 10); // Создаем определенный круг с радиусом 5 и центром в точке (10,10)
Triangle Treugolnik2 = new Triangle(2,7,3,4,5,30,60,90); // Создаем простой круг

Krug1.Draw();
Krug2.Draw();
Treugolnik1.Draw();
Treugolnik2.Draw();
}
}
}

stahma 04 мар 2015 00:14
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
class GeometryFigures
{
public double x { get; set; }
public double y { get; set; }
public GeometryFigures(double X, double Y)
{
x = X;
y = Y;
}
}
class circle : GeometryFigures
{
public int r { get; set; }
public circle(double X, double Y, int R)
: base(X, Y)
{
r = R;

}
public void draw()
{
Console.WriteLine("Рисуем фигуру");
}

class triangle : GeometryFigures
{
public int perimetr { get; set; }
public triangle(double X, double Y, int Perimetr)
: base(X, Y)
{
perimetr = Perimetr;
}
public void Draw()
{
Console.WriteLine("Рисуем фигуру");
}
}

class Program
{
static void Main(string[] args)
{
circle circle1 = new circle(2.5,3.5,5);
triangle triangle1 = new triangle(1, 1, 8);
}
}
}
}

Виталий 11 фев 2015 20:37
-- admin --

Это свойство, которое я (сейчас сам не понимаю зачем) вставил в метод. Оно вычисляет периметр круга.

Спасибо, сам не нашел эту ошибку.

Oper 11 фев 2015 10:28
Ну, вот, как то так:

using System;

namespace L17
{
//Создайте базовый класс Геометрическая фигура,
//предусмотрите в нем общие поля/свойства,
//например координаты центра фигуры,

//с помощью конструктора должна быть возможность задать центр.

//На базе этого класса создайте два новых – Треугольник и Окружность.
//В этих классах должны быть свои особые поля, например радиус для окружности.
//В оба класса добавьте метод Нарисовать, в котором могла бы быть специфическая логика рисования фигуры.
//Создайте объекты треугольник и окружность.

class GemetricFigure
{
protected int[] PositionOfCenterOfFigure = new int[2];
public GemetricFigure(int x, int y)
{
PositionOfCenterOfFigure[0] = x;
PositionOfCenterOfFigure[1] = y;
}

public int[] PositionOfCenter
{
get
{
return PositionOfCenterOfFigure;
}
set
{
PositionOfCenterOfFigure = value;
}
}
}

class Triangle : GemetricFigure
{
private double a, b, c;
public Triangle(double a, double b, double c, int x = 0, int y = 0) : base(x, y)
{
this.a = a;
this.b = b;
this.c = c;
}

public void Draw()
{
Console.WriteLine("Произошел вызов метода, который нарисовал треугольник на координатной оси с центром по координатам x={0} и y={1}\n", PositionOfCenterOfFigure[0], PositionOfCenterOfFigure[1]);
}

public double Perimeter
{
get
{
return a + b + c;
}
}
}

class Circle : GemetricFigure
{
private double Radius;
public Circle(double Radius, int x = 0, int y = 0) : base(x, y)
{
this.Radius = Radius;
}
public void Draw()
{
Console.WriteLine("Произошел вызов метода, который нарисовал окружность на координатной оси с центром по координатам x={0}, y={1} и радиусом={2}\n", PositionOfCenterOfFigure[0], PositionOfCenterOfFigure[1], Radius);
}

public double Perimeter
{
get
{
return 2 * Math.PI * Radius;
}
}
}

class Program
{
static void Main(string[] args)
{
//Создаем треугольник со сторонами 11, 5.1 и 7.382, и координатами центра треугольника (-30; 11)
Triangle myTriangle = new Triangle(11, 5.1, 7.382,- 30, 11);
//Создаем окружность с радиусом 7.32 и координатами центра окружности (0; 0)
Circle myCircle = new Circle(7.32);

//Рисуем фигуры
myTriangle.Draw();
myCircle.Draw();

//Узнаем координаты фигур
Console.WriteLine("Координаты треугольника: ({0};{1})", myTriangle.PositionOfCenter[0], myTriangle.PositionOfCenter[1]);
Console.WriteLine("Координаты окружности: ({0};{1})\n", myCircle.PositionOfCenter[0], myCircle.PositionOfCenter[1]);

//Поменяеем координаты фигур
myTriangle.PositionOfCenter[0] = 8;
myTriangle.PositionOfCenter[1] = 3;
myCircle.PositionOfCenter[0] = -5;
myCircle.PositionOfCenter[1] = -1;

//Узнаем координаты фигур
Console.WriteLine("Координаты треугольника: ({0};{1})", myTriangle.PositionOfCenter[0], myTriangle.PositionOfCenter[1]);
Console.WriteLine("Координаты окружности: ({0};{1})\n", myCircle.PositionOfCenter[0], myCircle.PositionOfCenter[1]);

//Узнаем периметры фигур
Console.WriteLine("Периметр треугольника равен: {0}", myTriangle.Perimeter);
Console.WriteLine("Периметр окружности равен: {0}\n", myCircle.Perimeter);

Console.ReadKey();
}
}
}

Максим 02 фев 2015 15:23
Виталий
---
Что это за конструкция, то ли метод, то ли свойство:

public void ofperimeter
{
set { perimeter = radius * 3.14; }
}

Виталий 02 фев 2015 09:41
По личным причинам (хотя правильнее сказать по лени) весь Январьзанимался какой ни-будь ерундой вместо си шарпа. Сегодня заставил себя доделать домашку которую пытался сделать на прошлой неделе:


public class figure
{
public int perimeter {get; set;}

public figure()
{

}
}

class circle : figure
{
public int radius;

public void ofperimeter
{
set { perimeter = radius * 3.14; }
}
}
class Program
{
circle krug1 = new circle(radius = 2);
}

AlexWolf 28 янв 2015 13:04
Надеюсь все верно...


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

namespace ConsoleApplication1
{
class Geometry
{
public int coordX { get; set; }
public int coordY { get; set; }
public string color;
public bool rad;
public Geometry(int coordX, int coordY, string color, bool rad)
{
this.coordX =coordX;
this.coordY = coordY;
this.color = color;
this.rad = rad;
}
}
class Ring : Geometry
{
public int radius;
public string mat;
public Ring(int radius, string mat, int coordX, int coordY, string color, bool rad) : base(coordX, coordY, color, rad)
{
this.radius=radius;
this.mat=mat;
}
public void Draw()
{
Console.WriteLine("Создан круг в координатах X" + coordX + " Y" + coordY + " " + color + " цвета, " + (rad ? "радиоктивный, " : "экологически безопасный, ") + "радиусом " + radius + "m, из "+mat);
}
public void customcoordinate()
{
try
{
Console.WriteLine("введите координаты X для нового объекта");
coordX = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("введите координаты Y для нового объекта");
coordY = Convert.ToInt32(Console.ReadLine());
}
catch (FormatException)
{
coordY = coordY;
coordX = coordX;
Console.WriteLine("Ошибка ввода координат! Допустимы только числа. Координата установленна по умолчанию.");
}
}
}

class Triangle : Geometry
{
public bool rvstrn;
public string mat;
public Triangle(bool rvstrn, string mat, int coordX, int coordY, string color, bool rad) : base(coordX, coordY, color, rad)
{
this.rvstrn = rvstrn;
this.mat = mat;
}
public void Draw()
{
Console.WriteLine("Создан "+(rvstrn ? "равносторонний" : "прямоугольный")+ " треугольник в координатах X" + coordX + " Y" + coordY + " " + color + " цвета, " + "из " + mat);
}
public void customcoordinate()
{
try
{
Console.WriteLine("введите координаты X для нового объекта");
coordX = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("введите координаты Y для нового объекта");
coordY = Convert.ToInt32(Console.ReadLine());
}
catch (FormatException)
{
coordY = coordY;
coordX = coordX;
Console.WriteLine("Ошибка ввода координат! Допустимы только числа. Координата установленна по умолчанию.");
}
}
}

class Program
{
static void Main(string[] args)
{
Ring circle1 = new Ring(2, "металла", 25, 35, "красного", false);
Ring circle2 = new Ring(5, "радия", 50, 35, "серебристо-белого", true);
Triangle tri1 = new Triangle(true, "дерева", 25, 65, "бурого", false);
Triangle tri2 = new Triangle(false, "пластика", 25, 130, "голубого", false);
Console.WriteLine("Для создания объектов нажимайте любую кнопку.");
Console.ReadKey();
circle1.Draw();
Console.ReadKey();
circle2.customcoordinate();
circle2.Draw();
Console.ReadKey();
tri1.Draw();
Console.ReadKey();
tri2.customcoordinate();
tri2.Draw();
Console.ReadKey();
}
}
}


baks85 27 янв 2015 21:38

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

namespace ConsoleApplication1
{
class GeoFig
{
public int Senterx { get; set; }
public int Sentery { get; set; }

public GeoFig (int senterx, int sentery)
{
Senterx = senterx;
Sentery = sentery;
}
public GeoFig ()
{
Senterx = 0;
Sentery = 0;
}
}
class Circle : GeoFig
{
private int radius;

public void Drawfig ()
{
Console.WriteLine("Поздравляю, вы нарисовали круг");
}
public int Radius
{
get
{ return radius; }
set
{
if (value < 1)
{
Console.WriteLine("радиус не может быть равен или меньше ноля, задано базовое значение радиуса \"1\"");
radius = 1;
}
else
radius = value;
}
}
public Circle (int senterx, int sentery, int radius) : base (senterx, sentery)
{
this.radius = radius;
}
public Circle(int senterx, int sentery) : base (senterx, sentery)
{
radius = 1;
}
public Circle(int radius) : base ()
{
Radius = radius;
}
}

class Triangle : GeoFig
{
public int Dotx2, Dotx3;
public int Doty2, Doty3;
public void Drawfig()
{
Console.WriteLine("Поздравляю, вы нарисовали треугольник");
}
public Triangle (int senterx, int sentery, int dotx2, int doty2, int dotx3, int doty3) : base (senterx, sentery)
{
Dotx2 = dotx2;
Doty2 = doty2;
Dotx3 = dotx3;
Doty3 = doty3;
}
}
class Program
{
static void Main(string[] args)
{
Circle krug = new Circle(2,3,3);
Console.WriteLine("радиус круга - " +krug.Radius +"\r\n" +"координаты центра - " +"Х=" +krug.Senterx +" " +"Y=" +krug.Sentery);
krug.Drawfig();

Triangle treugolnik = new Triangle(1,1,2,2,3,3);
Console.WriteLine("\r\nточка 1 Х=" + treugolnik.Senterx + " Y=" + treugolnik.Sentery + "\r\nточка 2 Х=" + treugolnik.Dotx2 + " Y=" +treugolnik.Doty2 +"\r\nточка 3 Х=" +treugolnik.Dotx3 +" Y=" +treugolnik.Doty3);
treugolnik.Drawfig();

Console.ReadKey();
}
}
}


Диманиак 28 ноя 2014 23:32
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplicationTest
{
class GeometricFigure
{
protected int CenterX { get; private set; }
protected int CenterY { get; private set; }
public GeometricFigure(int centerx, int centery)
{
CenterX = centerx;
CenterY = centery;
}
}
class Triangle : GeometricFigure
{
private int Point1X;
private int Point1Y;
private int Point2X;
private int Point2Y;
private int Point3X;
private int Point3Y;
public Triangle(int point1x, int point1y, int point2x, int point2y, int point3x, int point3y, int centerx = 0, int centery = 0)
: base(centerx, centery)
{
Point1X = point1x;
Point1Y = point1y;
Point2X = point2x;
Point2Y = point2y;
Point3X = point3x;
Point3Y = point3y;
Console.WriteLine("Треугольник создан: (" + Point1X+","+Point1Y+") - (" + Point2X+","+Point2Y+") - (" + Point3X+","+Point3Y+")");
}
public void Draw()
{
Console.WriteLine("Треугольник нарисован");
}
}
class Circle : GeometricFigure
{
private double Radius;
public Circle(int centerx, int centery, double radius)
: base(centerx, centery)
{
if (radius < 0)
{
Console.WriteLine("Радиус не может быть меньше нуля. Радиус установлен равным нулю.");
radius = 0;
}
Radius = radius;
Console.WriteLine("Окружность создана: (" + CenterX + "," + CenterY + ") R = " + Radius);
}
public void Draw()
{
Console.WriteLine("Окружность нарисована");
}
}
class Program
{
static void Main()
{
Triangle triangle1 = new Triangle(5,7,10,15,3,1,1,1);
triangle1.Draw();
Circle circle1 = new Circle(10, 10, 6);
circle1.Draw();
Console.ReadKey();
}
}
}

Мен 06 ноя 2014 15:40
все ок.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Наследование_базового_класса
{
class Geometry_figure
{
public int center_x {get; set;}//поле
public int center_y {get; set;}//поле
}

class treygolnic : Geometry_figure
{
public int dliinna {get; set;}// поле
public bool resON;//поле

public void resuvat_treygolnic()//метод
{
resON = true;
Console.WriteLine("im syka typoi xyu: "+ resON.ToString()+" v tockah: "+center_x+" "+center_y);
}
}

class okrygnost : Geometry_figure//класс
{
public int radiys {get; set;}//поле
public bool resON;//поле

public void resuvat_okrygnost()//метод
{
resON = true;
Console.WriteLine("i narisoval kryg: " + resON.ToString()+ " s radiusom "+ this.radiys.ToString());
}
}


class Program
{
static void Main(string[] args)
{
int x = Convert.ToInt32(Console.ReadLine());//зчитывание координат центра
int y = Convert.ToInt32(Console.ReadLine());//зчитывание координат центра

Geometry_figure cord = new Geometry_figure();//создание поля базового класса
cord.center_x = x;//переприсвоение значений х и у center_x и center_у соответственно
cord.center_y = y;

Console.WriteLine(cord.center_x.ToString()+" "+ cord.center_y.ToString());//вывод координат

Console.WriteLine("resuvat 1-triugol, 2-okrug");
int yes = Convert.ToInt32(Console.ReadLine());

switch (yes)//в завизимости од значения свитча (1/2)
{
case 1:
treygolnic tre = new treygolnic();
tre.dliinna = Convert.ToInt32(Console.ReadLine()); //присовение значения длинны
tre.center_x = x;//присвоение координат центра фигуры базового класса, как координат центра триугольника
tre.center_y = y;//присвоение координат центра фигуры базового класса, как координат центра триугольника
Console.WriteLine("dlinna: "+tre.dliinna);//вывод длинны

tre.resuvat_treygolnic();//вызов метода рисования

break;
case 2:
okrygnost okr = new okrygnost();
okr.radiys = Convert.ToInt32(Console.ReadLine());//присвоение начения радиуса
Console.WriteLine("radius: "+okr.radiys);//вывод радиуса

okr.resuvat_okrygnost();//вызов метода рисования
break;
}
Console.ReadKey();
}
}
}


Мен 06 ноя 2014 12:53
У меня возникла проблема:
класс создал, поля тоже. свойство есть. Но как сделать так чтобы с помощью конструктора можно было задать центр?

Максим 03 сен 2014 15:05
Garrett
---
Да

Garrett 03 сен 2014 01:46
А возврат введенного значения тогда будет value.x?

Максим 03 сен 2014 00:04
Garrett
---
Вместо структур воспользуйтесь классами и наследованием, тогда создание экземпляра будет в стиле:

ArcheryValue value = new ArcheryValue(60);

Garrett 02 сен 2014 22:53
А подскажите, как лучше тогда поступить:
я привык работать в другом языке (одна из ERP, но похоже на C#) с типами данных - когда есть определенный тип со своим именем, оно остается неизменным, а вот его параметры можно менять. Например, размер допустимой строки или тип числа. Соответственно, переопределяются и все наследники.

Я почитал про C# и вроде бы для пользовательских типов данных принято пользоваться структурами.
Скажем, есть у меня в коде такое свойство разных объектов как SkillValue. Я его задаю как Int. Одним из SkillValue является, например, SmithValue, также может быть AlchemyValue, ArcheryValue и т.п. Я хочу иметь возможность при желании в одном месте поменять int на double или на float и получить таким образом переопределенные типы всех наследников.

Это я реализовал, задав следующее

public struct SkillValue
{
public int x;

public SkillValue(int p1)
{
x = p1;
}
}

public struct ArcheryValue
{
public SkillValue x;

public ArcheryValue(SkillValue p1)
{
x = p1;
}
}

но в итоге объявление новой переменной соответствующего типа превращается в какую-то хрень. Во всяком случае, такое от меня требует компилятор (и оно работает)

public ArcheryValue startUnitArchery = new ArcheryValue(new SkillValue(60));

А вызывается значение этой переменной у меня тоже мудрено:
startUnitAuthority.x.x

Я что-то напутал? Или перемудрил? Или проще забить на такую оптимизацию?

Заранее спасибо за совет

Максим 02 сен 2014 17:09
Garrett
---
Структуры нельзя наследовать

Garrett 02 сен 2014 11:09
Подскажите, а наследование у struct бывает?
Я пытался со своими типами данных работать. Но там что-то с наследованием не получилось...

Максим 31 авг 2014 14:27
mumm
---
При выводе вы указываете только имя объекта, нужно еще поле или метод:

tr1.Centr

mumm 31 авг 2014 11:31
Когда вызываю, данные не выводятся на экран. В чем причина?

class Class1
{

static void Main(string[] args)
{
triangle tr1 = new triangle(20,"Прямоугольный");
Console.WriteLine(tr1);
Console.ReadKey();
}

}

class geometrical_shapes
{
public int Centr { get; set; }


public geometrical_shapes(int centr)
{
Centr = centr;
}
}

class triangle : geometrical_shapes
{
public string Type { get; set; }

public triangle(int centr ,string type) : base(centr)
{
Type = type;
}

}

Medeu 08 авг 2014 18:08
Спасибо Вам большое !

Максим 08 авг 2014 14:31
Medeu
---
Всё хорошо, метод risunok можно было определить в базовом классе, но это рассматривается в следующих уроках

Medeu 07 авг 2014 17:15
здравствуйте, Админ. где пропустил грубые, нелепые ошибки? оцените мою домашку )


class GeometrcFigura
{
public double x { get; set; }
public double y { get; set; }

public GeometrcFigura(double x, double y)
{
this.x = x;
this.y = y;
}


}

class Treugolnik : GeometrcFigura
{
private double a, h;

public Treugolnik (double x, double y) : base (x,y)
{

}


public double A
{
get
{
return a;
}

set
{
if (value < 0) Console.WriteLine("Основание не может быть меньше 0\n");
else a = value;

}
}

public double H
{
get
{
return h;
}

set
{
if (value < 0) Console.WriteLine("Высота не может быть меньше 0\n");
else h = value;

}
}

public void risunok()
{

double s;
s = (A * H) / 2;
Console.WriteLine(" центр фигуры ({0},{1})\n Основание треугольника = {2}\n Высота треугольника = {3}\n Площадь треугольника = {4}", x, y, A, H, Math.Round(s));

}
}

class Okruzhnost : GeometrcFigura
{
private double r;

public Okruzhnost (double x,double y ) : base (x,y)
{

}
public double R
{
get
{
return r;
}

set
{
if (value < 0) Console.WriteLine("Радиус не может быть меньше 0\n");
else r = value;

}



}

public void risunok ()
{
double s;
s = Math.PI * r * r;
Console.WriteLine("Центр фигуры ({0},{1})\n радиус окружности = {2}\n площадь окружности = {3}", x, y, R, Math.Round(s));

}


}
class Program
{

static void Main(string[] args)
{
bool start = true;
while (start)
{
Console.WriteLine("\nВыберите геометрическую фигуру\n треугольник - 1, окружность - 2, выйти - 3");
try
{
int choose = int.Parse(Console.ReadLine());
if (choose == 1)
{
double x, y, a, h;

Console.WriteLine("Введите координаты центра треугольника");
Console.Write("x= ");
x = Convert.ToDouble(Console.ReadLine());
Console.Write("y= ");
y = Convert.ToDouble(Console.ReadLine());
Treugolnik treugolnik1 = new Treugolnik(x, y);
do
{
Console.WriteLine("Введите основание треугольника");
a = Convert.ToDouble(Console.ReadLine());
treugolnik1.A = a;
}
while (a <= 0);

do
{
Console.WriteLine("Введите высоту треугольника");
h = Convert.ToDouble(Console.ReadLine());
treugolnik1.H = h;
}
while (h <= 0);

treugolnik1.risunok();
}

else if (choose == 2)
{
double x, y, r;
Console.WriteLine("Введите координаты центра окружности");
Console.Write("x= ");
x = Convert.ToDouble(Console.ReadLine());
Console.Write("y= ");
y = Convert.ToDouble(Console.ReadLine());
Okruzhnost okruzhnost1 = new Okruzhnost(x, y);

do
{
Console.WriteLine("Введите радиус окружности");
r = Convert.ToDouble(Console.ReadLine());
okruzhnost1.R = r;
}
while (r <= 0);


okruzhnost1.risunok();
}
else if (choose == 3) start = false;
else Console.WriteLine();

}

catch (Exception error)
{
Console.WriteLine(error.Message);
}
}




}
}
}

AlexSerikov 07 июл 2014 19:59
Admin
----------------
Премного благодарен Вам. Как всегда, ответ простой и понятный :)

Максим 07 июл 2014 19:33
AlexSerikov
---
Есть такое общее соглашение - поля для внутренних нужд объекта, для взаимодействия с внешним миром - свойства.

Кроме этого, со свойством можно сделать так:

bool bState {get; private set;} // свойство только на чтение

AlexSerikov 06 июл 2014 19:03
Ничего особенного, но мне хотелось бы знать, я все правильно понял ? А так же я прошу, уважаемый Admin, объясните мне одну деталь. Из прошлого урока я кое-что не понял. Какой смысл делать автоматическое свойство, если можно просто использовать открытое поле (да, это не правильно, предоставлять доступ к полю, но...) ? Если будет автоматическое свойство, тогда поле будет private, но я все-равно получу доступ к ЗАКРЫТОМУ полю через set и все-равно установлю любое значение полю. В чем смысл ? Я понимаю, зачем свойства нужны, но автоматическому я не могу придумать никакой пользы. Уж проще создать поле и сделать его public.
А теперь код:

namespace sampleClasses
{
class Geometry
{
private int angl;
public int Angles
{
get
{
return angl;
}
set
{
if (value == 0) Console.WriteLine("Нет углов");
else angl = value;
}
}
private string Name;
private int CenterCoordinatesX;
private int CenterCoordinatesY;
public Geometry(string Name, int CenterCoordinatesX, int CenterCoordinatesY)
{
this.Name = Name;
this.CenterCoordinatesX = CenterCoordinatesX;
this.CenterCoordinatesY = CenterCoordinatesY;
}
}
class Circle : Geometry
{
public double Radius;
public Circle(string Name, int CenterCoordinatesX, int CenterCoordinatesY) : base (Name, CenterCoordinatesX, CenterCoordinatesY)
{
Console.WriteLine("Фигура "+Name+" создана");
}
public void Draw()
{
Console.WriteLine("Нарисована");
}
}
class Triangle : Geometry
{
public bool rectangular;
public Triangle(string Name, int CenterCoordinatesX, int CenterCoordinatesY): base(Name, CenterCoordinatesX, CenterCoordinatesY)
{
Console.WriteLine("Фигура " + Name + " создана");
}
public void Draw()
{
Console.WriteLine("Нарисована");
}
}
class Program
{

static void Main()
{
Circle myCircle = new Circle("Круг", 5, 5);
myCircle.Angles = 0;
myCircle.Draw();
myCircle.Radius = 5;
Console.WriteLine("S="+ Math.Pow(myCircle.Radius, 2)*Math.PI);

Triangle myTriangle = new Triangle("Прямоугольный треугольник", 15, 15);
myTriangle.Angles = 3;
Console.WriteLine("Количество углов "+myTriangle.Angles);
myTriangle.rectangular = true;
if (myTriangle.rectangular) Console.WriteLine("Один из углов = 90 градусов");
myTriangle.Draw();
Console.ReadKey();
}
}
}

Максим 04 фев 2014 15:11
palazhevich
---
Очень хорошо

palazhevich 03 фев 2014 00:05
Добрый вечер. Что то вот так.

class GeometricalFigure
{ public int X { get; set; }
public int Y { get; set; }
public GeometricalFigure(int x, int y)
{ this.X = x; this.Y = y; }
}
class Triangle : GeometricalFigure
{ public int Height { get; set; }
public Triangle(int X, int Y, int height): base(X, Y)
{ this.Height = height; }
public void Draw()
{ Console.WriteLine(" x| B+ \n | + \n | +++ \n | +");
Console.WriteLine(" | + + + \n | .O \n | + + + \n | +");
Console.WriteLine(" | A+++++++++C \n | N \n |_______________y");
}
public void writeTriangle()
{ Console.WriteLine(" Треугольник ABC:");
Console.WriteLine("Координаты центра вписанной окружности O: {0},{1}\nВысота треугольника BN: {2}", X, Y, Height);
} }
class Circle : GeometricalFigure
{ public int Radius { get; set; }
public Circle(int X, int Y, int radius): base(X, Y)
{ this.Radius = radius; }
public void Draw()
{ Console.WriteLine(" x| \n | +++ \n | + + \n |");
Console.WriteLine(" | + + \n | + .O +");
Console.WriteLine(" | + + \n | \n | + +");
Console.WriteLine(" | +++ \n |_______________________y");
}
public void writeCircle()
{ Console.WriteLine(" Окружность:");
Console.WriteLine("Координаты центра окружности O: {0},{1}\nРадиус окружности R: {2}", X, Y, Radius);
}}
class Program
{ static void Main(string[] args)
{ do
{ int figure;
Console.WriteLine();
Console.WriteLine("Выберете геометрическую фигуру: треугольник - 1, окружность - 2 ");
figure = Convert.ToInt32(Console.ReadLine());
if (figure == 1)
{ int x, y, h;
Console.WriteLine("Введите координаты центра вписанной окружности: \nх: ");
x = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("y: ");
y = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Введите значение высоты треугольника: ");
h = Convert.ToInt32(Console.ReadLine());
Console.WriteLine();
Triangle triangle1 = new Triangle(x, y, h);
triangle1.writeTriangle();
Console.WriteLine();
triangle1.Draw();
}
else if (figure == 2)
{ int x, y, r;
Console.WriteLine("Введите координаты центра окружности: \nх: ");
x = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("y: ");
y = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Введите радиус окружности: ");
r = Convert.ToInt32(Console.ReadLine());
Console.WriteLine();
Circle circle1 = new Circle(x, y, r);
circle1.writeCircle();
Console.WriteLine();
circle1.Draw();
}}
while (true);}}}

nikolay 03 дек 2013 14:00
Admin, спасибо буду исправлять

Максим 02 дек 2013 21:20
nikolay
---
Однозначно правильного решения не бывает. Но здесь у вас есть некоторые нехорошие моменты:

1. В классе GeometricFigure объявлено свойство Radious, но ведь не любая геом. фигура имеет радиус, у треугольника его нет. Это свойство должно было быть в классе Окружность. Понимаю, что в случае с треугольником имелся в виду радиус вписанной окружности. Но так не делается. Тогда уж нужно было в классе Triangle объявить поле типа Cycle, которое и представляло бы вписанную окружность, и уже у нее получать радиус.

2. side = (side + side + side) / 2; // в поле сторона вы записали полупериметр. Когда необходимо получить значение стороны, теперь мы получим полупериметр...Нужно было для этого отдельную переменную создать.

3. GetTriangalSque - метод, который начинается с Get (получить), должен по логике что-то возвращать. Думаю, тут лучше было бы убрать этот метод, и его реализацию перенести в свойство TriangalSqauer:

public double TriangalSqauer
{
get
{
side = (side + side + side) / 2;
return Radious * side;
}
}

nikolay 02 дек 2013 16:06
а так правильно?

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

namespace BasicClass
{
public class GeometricFigure
{
public double Radious {get; set;}
public GeometricFigure(double r)
{
this.Radious = r;
}
}

class Triangle : GeometricFigure
{
private double LenghtOfSideTriangal {get; set;}
public double TriangalSqauer;
private double side {get; set;}

public Triangle(double r, double lengh1, double p): base(r)
{
this.LenghtOfSideTriangal = lengh1;
this.side = p;

}

public void GetTriangalSquer()
{
side = (side + side + side)/2;
TriangalSqauer = Radious * side;
}
}


class Cycle: GeometricFigure
{
const double Pi = 3.14;
public double CycleSquare;

public Cycle(double r): base(r)
{

}

public void DrawCycle()
{
CycleSquare = Pi * Math.Pow(Radious, 2);
}

}


class Program
{
static void Main(string[] args)
{
Triangle triangle1 = new Triangle(30, 15, 15);
Cycle cycle1 = new Cycle(35);

triangle1.GetTriangalSquer();
cycle1.DrawCycle();
Console.WriteLine("Squar of Triangal =" + triangle1.TriangalSqauer);
Console.WriteLine(cycle1.CycleSquare);
Console.ReadKey();

}
}
}


Максим 25 ноя 2013 21:19
Dima
---
Очень хорошо. RadiusOfRound тоже нужно было сделать свойством, и более точная константа ПИ объявлена в классе Math - Math.PI

Dima 24 ноя 2013 13:47
namespace proga
{
class Geometricfigures
{
public int x { get; set; }
public int y { get; set; }
public Geometricfigures(int x, int y)
{ this.x = x;
this.y = y;
}
}
class Triangle:Geometricfigures
{
public int HeightOfTriangle { get; set; }
public int Osnovanie { get; set; }
public Triangle(int HeightOfTriangle, int Osnovanie,int x, int y):base(x,y)
{ this.HeightOfTriangle = HeightOfTriangle;
this.Osnovanie = Osnovanie;
}
public double GetArea()
{
return 0.5*HeightOfTriangle*Osnovanie;
}
}
class Round : Geometricfigures
{public double RadiusOfRound;

public Round(double RadiusOfRound,int x, int y):base(x,y)
{

this.RadiusOfRound = RadiusOfRound;
}

public double GetArea()
{ return Math.Pow(3.14,2) * RadiusOfRound; }
}


class Program
{

static void Main(string[] args)
{
int xOfTriangle = 34;
int yOfTriangle = 50;
int xOfRound = 11;
int yOfRound = 78;
int HeightOfTriangle=3;
int Osnovanie=7;
string treugolnik = "площадь треугольника";
string krug = "площадь круга";
double RadiusOfRound = 4;
Triangle tre = new Triangle( HeightOfTriangle, Osnovanie,xOfTriangle,yOfTriangle);
Round round = new Round(RadiusOfRound,xOfRound,yOfRound);
Console.WriteLine(treugolnik + ": " + tre.GetArea() + ", координаты " + xOfTriangle + ":" + yOfTriangle);
Console.WriteLine(krug+":"+round.GetArea()+", координаты "+xOfRound+":"+yOfRound);

Console.ReadKey();

}
}
}

RomanS 14 ноя 2013 18:56
Спасибо.

Максим 14 ноя 2013 18:02
RomanS
---
Если базовый конструктор ожидает аргументы, в любом случае необходимо вызывать базовый через ключевое слово base. Будет работать только такая схема:
public Класс-наследник(аргументы только для базового конструктора) : base (аргументы только для базового конструктора)

RomanS 14 ноя 2013 13:23
В данном уроке описаны две ситуации: 1 - конструктор задан только для класса-наследника, 2 - конструктор задан И для базового класса, И для класса-наследник. Возник такой теоретический вопрос: если существует ситуация, когда в базовом классе конструктор нужен (для инициализации полей,общих для всех объектов классов-наследников, значениями аргументов, которые ему передаются), а в классах-наследниках конструкторы не нужны (так как эти классы-наследники, к примеру, нужны просто для реализации полиморфизма относительно переданных базовому классу аргументов), то можно ли создать экземпляр класса наследника вот так:

Класс_наследник объект = new Класс-наследник(аргументы ТОЛЬКО для базового конструктора);

БЕЗ прописывания конструкторов классов-наследников вот так:

public Класс-наследник(аргументы только для базового конструктора) : base (аргументы только для базового конструктора)

????
Повторюсь, вопрос носит исключительно теоретический характер.
Заранее спасибо.

Максим 09 ноя 2013 15:28
RomanS
---
Хочу сказать, что качество кода на очень хорошем уровне. Можно было только не создавать некоторые переменные:

double area;
area = 0.5 * triangle_base * heigth;
return area;

Здесь создание переменной не очень то необходимо, можно так:

return 0.5 * triangle_base * heigth;

Ну и это:
area = Figure1.GetArea();
Console.WriteLine("Площадь трапеции равна " + area);

Можно так:

Console.WriteLine("Площадь трапеции равна " + Figure1.GetArea());

А на счет модификаторов, то вы объявили открытые поля, что не желательно делать. Можно было в этом случае использовать автоматические свойства.

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

RomanS 08 ноя 2013 09:53
Слегка изменил задание. В очередной раз понимаю, что не понимаю полностью где какой модификатор доступа корректнее всего использовать.
using System;
class Figure
{
public double heigth;
public Figure(double heigth)
{
this.heigth = heigth;
}
}
class Trapezium : Figure
{
public double trapezium_top_base;
public double trapezium_bottom_base;
public Trapezium(double trapezium_top_base, double trapezium_bottom_base, double h) : base(h)
{
this.trapezium_top_base = trapezium_top_base;
this.trapezium_bottom_base = trapezium_bottom_base;
}
public double GetArea()
{
double area;
area = 0.5 * (trapezium_bottom_base + trapezium_top_base) * heigth;
return area;
}
}
class Triangle : Figure
{
public double triangle_base;
public Triangle(double triangle_base, double h) : base(h)
{
this.triangle_base = triangle_base;
}
public double GetArea()
{
double area;
area = 0.5*triangle_base*heigth;
return area;
}
}
class Program
{
static void Main()
{
Console.WriteLine("Введите высоту фигуры:");
try
{
double area;
double h = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Выбирете тип фигуры [1 - трапеция, 2 - треугольник]:");
int figure = Convert.ToInt32(Console.ReadLine());
switch(figure)
{
case 1:
Console.WriteLine("Выбрана трапеция.");
Console.WriteLine("Введите длину большего основания:");
double trapezium_bottom_base = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Введите длину меньшего основания:");
double trapezium_top_base = Convert.ToDouble(Console.ReadLine());
Trapezium Figure1 = new Trapezium(trapezium_bottom_base, trapezium_top_base, h);
area = Figure1.GetArea();
Console.WriteLine("Площадь трапеции равна " + area);
Console.ReadKey();
break;
case 2:
Console.WriteLine("Выбран треугольник.");
Console.WriteLine("Введите длину основания:");
double triangle_base = Convert.ToDouble(Console.ReadLine());
Triangle Figure2 = new Triangle(triangle_base, h);
area = Figure2.GetArea();
Console.WriteLine("Площадь треугольника равна " + area);
Console.ReadKey();
break;
default:
Console.WriteLine("Необходимо ввести либо 1, либо 2!");
Console.ReadKey();
break;
}
}
catch(Exception error)
{
Console.WriteLine("Необходимо ввести число!");
Console.ReadKey();
}
}
}

Максим 10 окт 2013 18:06
Lili
---
Ух, очень много у вас тут получилось нехороших моментов.

Ваш вопрос: если наши поля объявлены как public, зачем тогда мы используем {get;set;}?

{get;set;} - это означает, что мы обявили автоматическое СВОЙСТВО, а не поле (вам стоит заглянуть в Урок 16. Свойства в Си-шарп). С каким модификатором доступа должно объявляться свойство зависит от конкретной ситуации. Обычные поля вообще не следует объявлять как public.

Насчет константы. Вы объявили число Pi в классе фигуры, и эту константу унаследовали окружность и треугольник. В классе фигуры да, Pi нужно, но в треугольнике не очень. Можно было объявить ее только в классе окружность. Теперь о ее видимости. Вы сделали ее public, это означает что она видна всем. Получается, что в любом объекте окружность она будет доступна. Но это неправильно. Число Pi никак не характеризует окружность, в отличии от таких свойств, как радиус, координаты центра. Поэтому такую константу следует сделать закрытой. И не забывайте про модификатор protected, который делает поле/свойство/... доступным в классе наследнике, и закрытым где либо еще. Например, если все таки число Pi должно было быть в обоих классах треугольник и окружность, его стоило бы объявить как protected. Оно было бы доступно в наследниках, но закрыто уже в объектах.

Идем дальше. В классе треугольник есть конструктор, который устанавливает площадь и сторону. Дальше вы объявляете метод, который считает и возвращает высоту, и при этом, он СНОВА принимает площадь и сторону. Площадь Square уже была назначена конструктором базового класса, но это свойство вы объявили закрытым, и, соответственно, в классе треугольник не можете его использовать. Нужно было объявить Square как public. Со стороной еще проще, Side уже установлена конструктором и доступна в классе треугольник, нужно было использовать Side в методе Height, а не передавать лишний раз. Этот метод мог бы выглядеть так (установив при этом Square как public):

public double Height()
{
h = 2 * Square / Side;
return h;
}
}

В идеале, метода Height не должно было быть, и следовало бы реализовать это через свойство:

public double Height
{
get
{
return 2 * Square / Side;
}
}

И еще по поводу имен. Название метода должно отображать ДЕЙСТВИЕ, здесь должен участвовать глагол. GetHeight() - получить высоту. Существительными же называются поля/свойства. Height - имя для поля/свойства.

Lili 09 окт 2013 14:10
namespace yrok17_nasledovanie
{
class Geometrical
{
private double Square { get; set; }
public const double Pi = 3.14;


public Geometrical(double s)
{
Square = s;
}
}
class Triangle : Geometrical
{
private double Side { get; set; }
private double h { get; set; }

public Triangle(double s, double a) : base(s)
{
Side = a;
}
public double Height(double s, double a)
{
h = 2 * s / a;
return h;
}
}
class Circle : Geometrical
{
private double Diametr { get; set; }
private double length { get; set; }

public Circle(double s, double d):base(s)
{
Diametr = d;
}
public double CircleLengh( double d)
{
length = Pi * d;
return length;
}
}

class Program
{
static void Main(string[] args)
{
Triangle tr1 = new Triangle(48, 12);
tr1.Height(48,12);
Console.WriteLine("высота треугольника = " + tr1.Height(48,12));

Circle cir1 = new Circle(56, 16);
cir1.CircleLengh(16);
Console.WriteLine("длина окружности = " + cir1.CircleLengh(16));

}
}
}
а если я константу Пи делаю private, как я осуществляю к ней доступ, чтоб вычислить мою длину окружности? или это вообще незначительно и вполне можно ее оставлять public?

Lili 08 окт 2013 21:55
объясните, пожалуйста
если наши поля объявлены как public, зачем тогда мы используем {get;set;}?

Андрей 07 окт 2013 21:31
Спасибо, помогло!

Максим 07 окт 2013 01:38
Андрей
---
Size только на чтение, а вот Font можно изменить:
MyButton.Font = new Font(MyButton.Font.FontFamily, 30);

Андрей 04 окт 2013 22:27
Cоздал класс MyButton наследник класса Button. Пытаюсь изменить размер шрифта вот так: MyButton.Font.Size = 5; пишет "Невозможно присвоить значение свойству или индексатору "System.Drawing.Font.Size" -- доступ только для чтения". Можно ли как-то получить доступ?

Максим 02 сен 2013 23:35
Alex
---
Вы правы. Пользователь hojiakbar просто ошибся, и тот фрагмент кода должен был выглядить так как вы и написали:

public Triangle(int a, int b, int x, int y): base(x, y)
{
this.a = a;
this.b = b;
}

Alex 02 сен 2013 17:49
public Triangle(int a, int b, int x, int y): base(x, y)
{
a = this.a;
b=this.b;
}

В уроке посвященном this. недопонял, а сейчас окончательно запутался. С помощью this. мы обращаемся к полям конкретного объекта класса, в котором this. используется. Не могу в таком случае понять логику данного фрагмента кода. Переменным, которые содержат введенные пользователем значения присваиваются значения свойств данного объекта? Или имелось все таки ввиду:
public Triangle(int a, int b, int x, int y): base(x, y)
{
this.a = a;
this.b = b;
}
т.е. мы свойству создаваемого объекта класса Triangle присваиваем значения переданных в конструктор a и b.
Или я все таки не правильно понял как работает this. Помогите разобраться пожалуйста...

hojiakbar 24 авг 2013 23:31
class GeometricFigura
{
private int abcisa{get;set;}
private int ordinatus{ get; set; }
public static double Pi;
public GeometricFigura(int abcisa, int ordinatus)
{
Pi = 3.14;
this.abcisa = abcisa;
this.ordinatus = ordinatus;
}
}
class Circle : GeometricFigura
{
public int radius { get; set; }
public Circle(int r, int x, int y):base(x,y)
{
radius = r;
}
public void CreateCircle()
{}
}
class Triangle : GeometricFigura
{
public int a { get; set; }
public int b { get; set; }
public int angleRadian { get; set; }
public Triangle(int a, int b, int x, int y): base(x, y)
{
a = this.a;
b=this.b;
}
public void CreateTriangle()
{}
}
class Program
{
static void Main(string[] args)
{
int a = Convert.ToInt16(Console.ReadLine());
int b = Convert.ToInt16(Console.ReadLine());
Triangle triangle = new Triangle(a,b,0,0);
triangle.angleRadian = Convert.ToInt16(Console.ReadLine());
triangle.CreateTriangle();
}
}

Lucifer 23 июл 2013 02:00
Было полезно.


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

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


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

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

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

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

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

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