- •Платформа .Net / Microsoft
- •8. Встроенные типы данных
- •9. Преобразование встроенных типов данных
- •10. Переменные, константы, перечисление. Определение значений переменных.
- •16. Цикл с параметром for
- •17. Операторы присваивания. Составные операторы присваивания
- •11. Строковые переменные. Массивы
- •12. Ветвление программ на языке c#
- •13. Безусловные и условные переходы
- •14. Оператор выбора switch
- •15. Цикл while с предусловием и постусловием
- •18. Операторы сравнения
- •19. Основы обработки исключений
- •20. Понятие «Классы». Спецификаторы
- •21. Методы класса
- •22. Конструкторы экземпляра класса
- •23. Деструкторы
- •24. Свойства экземпляра класса
20. Понятие «Классы». Спецификаторы
Классы – содержат данные, зависящие от свойств объектов класса, функции, определяющие их поведение, а также события, на которые можно реагировать объект класса. Все классы библиотеки .NET имеют одного общего предка – object и ориентированы в единую иерархическую структуру.
Внутри нее классы логически сгруппированы в так называемые пространства имен, которые служат для упорядочения имен классов и предотвращение конкретных имен.
Любая платформа .NET использует пространство System. В нем отражены классы, которые обеспечивают базовую функциональность
using System
using System.WindowsForm
namespace WindowsFormApplication1
{ public partial class Form1: Form
{ public Form
using System
namespace ConsoleApplication;
{
class Class1
{static void Main ()
{Console.WriteLine (“Введите число”);
string s=Console.ReadLine ();
Console.WriteLine (“Вы ввели ”+s);
}
}
}
}
}
21. Методы класса
Использование и создание методов в программе на С# во многом схоже на подход из С++. Рассмотрим это поподробней. В C# любой метод является методом какого-либо класса. Например:
using System;
class Man{
public string name;
public int age;
public Man(string n,int a){
name = n;
age = a;
}
public void Show(){
Console.WriteLine("Имя = "+name+"\tВозраст = "+age);
}
}
class Sample
{
static void Main()
{
try{
Man obj = new Man("Fire",56);
obj.Show();
}
catch(Exception er){
Console.WriteLine(er.Message);
}
Console.Read();
}
}
В данном примере у нас есть класс Man с методом Show и конструктором. Возле Show стоит спецификатор доступа public. Если его не указать по умолчанию будет поставлен private и вызвать его из класса Sample не получится. Для возврата значений и выхода из метода также как и в С++ используется оператор return. Принцип использования демонстрируется в примере:
using System;
class SomeClass{
public float x;
public float y;
public SomeClass(float a,float b)
{
x = a;
y = b;
}
public float Summa(){
return x+y;
}
public void Test(float t){
if(t == 0){
Console.WriteLine("Для деления был передан 0");
return;
}
Console.WriteLine(" Результат = ",(x+y)/t);
}
}
class Sample
{
static void Main()
{
try{
SomeClass obj = new SomeClass(2,3);
Console.WriteLine("Сумма равна = "+obj.Summa());
obj.Test(0);
}
catch(Exception er){
Console.WriteLine(er.Message);
}
Console.Read();
}
}
Передача параметров
В C# есть два способа передачи параметров методуа по значению, и по ссылке. В первом случае внутрь метода попадает не оригинальная переменная. а её копия, которая разрушается при выходе из метода не оказывая влияния на оригинальную переменную. При передаче методу значений обычных типов, таких как int, double и т.д. используется передача по значению. Следовательно, при изменение параметра, никакого влияния на оригинальную переменную не происходит. Например:
using System;
class SomeClass{
public float x;
public SomeClass(float a){
x = a;
}
public void TryToSetTo99(float res){
res = 99;
}
public float Mult(float res){
return res*x;
}
}
class Sample
{
static void Main()
{
try{
SomeClass obj = new SomeClass(2);
float test = 5;
obj.TryToSetTo99(test);
Console.WriteLine(test);
Console.WriteLine(obj.Mult(test));
}
catch(Exception er){
Console.WriteLine(er.Message);
}
Console.Read();
}
}
Легко заметить, что переменная test не изменила своё значение после передачи её в TryToSetTo99.Теперь рассмотрим второй способ передачи параметров - по ссылке. В этом случае передается не копия переданного параметра, а ссылка на оригинальный объект, что позволяет модифицировать оригинал. По ссылке всегда автоматически передаются объекты классов. Например:
using System;
class SomeClass{
public int x;
public int y;
}
class SomeClass2{
public void Set(SomeClass obj){
obj.x=1;
obj.y=2;
}
}
class Sample
{
static void Main()
{
try{
SomeClass obj = new SomeClass();
SomeClass2 obj2 = new SomeClass2();
obj.x = 8;
obj.y = 9;
obj2.Set(obj); // передаётся по ссылке
Console.WriteLine(obj.x+" "+obj.y);
}
catch(Exception er){
Console.WriteLine(er.Message);
}
Console.Read();
}
}
Как изменить значение для переменной типа int или double при передаче её внутрь метода будет показано в следующем разделе. В С#, как и в С++. можно перегружать методы. Правила при перегрузке такие же, как и в С++.
Статические методы
Статическим методом называется метод с модификатором static. Разница между обычным методом класса и таким состоит в том, что метод с static модификатором может быть вызван без создания какого-либо объекта класса. Например:
using System;
class Figure{
public static void Draw(){
Console.WriteLine("FigureDraw");
}
}
class Sample
{
static void Main()
{
try{
Figure.Draw();
}
catch(Exception er){
Console.WriteLine(er.Message);
}
Console.Read();
}
}
Отличия static - методов от обычных:
Методы с модификатором static не имеют ссылки this.
Метод с модификатором static, может непосредственно( без указания имени объекта ) вызывать только другой статический метод.
Метод с модификатором static имеет только прямой доступ к static - данным.
Например:
using System;
class Figure{
public int a;
public void Line(){
Console.WriteLine("*************");
}
public static void Draw(){
a = 78
Console.WriteLine("FigureDraw");
Line();
}
public static void Draw2(Figure t){
t.Line();
}
}
class Sample
{
static void Main()
{
try{
Figure.Draw();
Figure.Draw2();
}
catch(Exception er){
Console.WriteLine(er.Message);
}
Console.Read();
}
}
