Klasa w języku C#

Definicja klasy

Klasa to złożony typ danych, który zawiera w sobie Tworząc klasę można implementować jej konstruktor i destruktor.

Konstruktor klasy

Konstruktor klasy to metoda wywoływana jako pierwsza przy tworzeniu obiektu. Konstruktor ma taką samą nazwę jak nazwa klasy. Konstruktor nie zwraca żadnych wartości. Jeżeli w ciele klasy nie zdefiniowano konstruktora to podczas tworzenia obiektu danej klasy wywoływany jest konstruktor domyślny. Konstruktor zdefiniowany może posiadać argumenty. Podczas tworzenia obiektu konstruktor wywoływany jest słowem kluczowym new.

Przykład ciała konstruktora klasy Figura

Wskazówka:


//konstruktor
Figura(int ileOdcinkow)
{
	odcinek = new List<float>();
	IleOdcinkow= ileOdcinkow;
}

W tym przykładzie konstruktor ma jeden argument, który określa z ilu odcinków ma składać się figura

Destruktor klasy

Destruktory klasy są wywoływane automatycznie przy zakończeniu odwołań do obiektu utworzonego z danej klasy. Istnieją takie sytuacje, w których musimy sami po obiekcie posprzątać (zwolnic pamięć). Najczęściej są to sytuacje z wykorzystaniem wskaźników, tworzeniem buforów graficznych itp. Destruktor definiuje się od znaku tyldy (~) używając nazwy klasy, której destruktor dotyczy

Wskazówka:


//destruktor
~Figura()
{
	odcinek.Clear();
	odcinek = null;
}

Dodawanie klasy w kompilatorze Visual Studio

W praktyce programowania przyjęte jest, że klasy tworzy się w osobnych plikach, wtedy nazwa pliku jest jednakowa z nazwą klasy. Nazwy klasy przyjęto definiować z dużej litery.

Aby dodać klasę wybierz menu Projekt/Dodaj klasę?

Dodawanie klasy w kompilatorze Visual Studio

W oknie dialogowym Dodaj nowy element wybierz jak poniżej

Dodaj nowy element Visual Studio C#

Jeżeli wszystko zostało wykonane prawidłowo to w zakładce Eksplorator rozwiązań pojawi się plik o nazwie utworzonej klasy, a w Oknie definicji kodu pojawi się nowa zakładka z zalążkiem kodu nowo utworzonej klasy

Dodaj klasę Visual Studio C#

Jak interpretować poniższy zalążek definicji utworzonej klasy?

Wskazówka:


namespace WlasciwosciBryl
{
    internal class Bryla
    {
    }
}

Słowo kluczowe namespace oznacza, że tworzona klasa będzie zdefiniowana w zakresie powiązanych obiektów przestrzenią nazw (w tym przykładzie przestrzenia projektu o nazwie WlasciwosciBryl)

Słowo kluczowe internal jest modyfikatorem dostępu pozwalającym na dostęp za pomocą dowolnego kodu w tym samy zestawie kompilacji (w tej samej przestrzeni nazw)

Przykładowa aplikacja Właściwości figur

Cel: Napisz aplikację wykorzystującą klasę dotyczącą podstawowych właściwości figur. Na tym etapie rozwiązania opracuj metodę tworzenia obiektu klasy Figura z możliwością losowego przypisania długości boków.

Utwórz formatkę

Proponowany układ kontrolek

aplikacja Właściwości figur Visual Studio C#

Utwórz klasę Figura

Zadaniem klasy Figura jest utworzenie listy odcinków tworzących przyszłą figurę. Można przyjąć, że jeden odcinek to okrąg, trzy odcinki to trójkąt itd. Na tym etapie rozwiązania klasa powinna zawierać:

Klasa Figura ma za zadanie być klasa bazową do przyszłych klas związanych z konkretnymi figurami (okrąg, trójkąt, kwadrat, prostokąt itp.)

Dodaj do projektu klasę Figura. Plik Figura.cs wypełnij poniższym kodem

Wskazówka:


namespace WlasciwosciFigur
{
    internal class Figura
    {
        private int n;//ilość odcinków
        //okrąg ma jeden i jest to promien,
        //trojkat ma trzy i są to boki itd.
        private List<float> odcinek;

        //dostęp do właściwości
        public int IleOdcinkow
        {
            set{n= value;//ustaw ile docinków ma figura
                odcinek.Clear();//czyśc liste odcinków
                //ustaw długosci odcinko na zero
                for (int i = 0; i < n; i++) odcinek.Add(0);
            }
            get{ return n;}//zwróć ilość odcinków 
        }
        public List<float> Odcinek
        {
            get { return odcinek;}  
        }
        //konstruktor
        public Figura(int ileOdcinkow)
        {
            odcinek = new List<float>();
            IleOdcinkow= ileOdcinkow;
        }
        //destruktor
        ~Figura()
        {
            odcinek.Clear();
            odcinek = null;
        }
        //metody
        public void UstawDlugosc(int i,float dlugosc)
        {
            if (i < odcinek.Count)
                odcinek[i] = dlugosc;
            else MessageBox.Show(
                 "Figura nie ma takiej ilości odcinków",
                 "Komunikat",
                 MessageBoxButtons.OK,
                 MessageBoxIcon.Error
                );
        }
        //ustaw losowe dlugosci boków
        public void UstawLosoweDlugosciBokow()
        {
            Random los=new Random();
            for (int i = 0; i < n; i++)
                UstawDlugosc(i, (float)los.NextDouble()*100+1);
        }
    }
}

Utwórz obiekt klasy Figura

W głównej klasie projektu zadeklaruj zmienną klasy Figura

Wskazówka:


public partial class Form1 : Form
{
	private Figura figura;
	public Form1()
	{
		InitializeComponent();
	}

W zdarzeniu Click kontrolki Button powołaj do życia zadeklarowany obiekt (figura). W konstruktorze obiektu podaj ilość boków odczytaną z kontrolki TextBox. Wylosuj losowe długości boków posługując się metodą zdefiniowana w klasie Figura. Patrz poniższy kod

Wskazówka:


private void button1_Click(object sender, EventArgs e)
{
	//usuń poprzednie wystąpienie obiektu
	if(figura!= null){ figura = null; }
	int n=Convert.ToInt32(textBox1.Text);
	figura = new Figura(n);
	figura.UstawLosoweDlugosciBokow();
}

Na ekranie w kontrolce TextBox pracującej w układzie Multiline pokaż wylosowane długości boków

Wskazówka:


private void button2_Click(object sender, EventArgs e)
{
	if (figura == null || figura.IleOdcinkow < 1)
	{
		MessageBox.Show(
		 "Figura nie została utworzona",
		 "Komunikat",
		 MessageBoxButtons.OK,
		 MessageBoxIcon.Information
		);
		return;
	}
	textBox2.Clear();
	foreach(float o in figura.Odcinek)
		textBox2.AppendText(o.ToString("F2")+Environment.NewLine);  
}

Skompiluj program i sprawdź efekt działania

klasa Właściwości figur Visual Studio C#

Pełny kod pliku Form1.cs

Wskazówka:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WlasciwosciFigur
{
    public partial class Form1 : Form
    {
        private Figura figura;
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            //usuń poprzednie wystąpienie klasy
            if(figura!= null){ figura = null; }
            int n=Convert.ToInt32(textBox1.Text);
            figura = new Figura(n);
            figura.UstawLosoweDlugosciBokow();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            if (figura == null || figura.IleOdcinkow < 1)
            {
                MessageBox.Show(
                 "Figura nie została utworzona",
                 "Komunikat",
                 MessageBoxButtons.OK,
                 MessageBoxIcon.Information
                );
                return;
            }
            textBox2.Clear();
            foreach(float o in figura.Odcinek)
                textBox2.AppendText(o.ToString("F2")+Environment.NewLine);  
        }
    }
}

Pełny kod pliku Figura.cs

Wskazówka:


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

namespace WlasciwosciFigur
{
    internal class Figura
    {
        private int n;//ilość odcinków
        //okrąg ma jeden i jest to promien,
        //trojkat ma trzy i są to boki itd.
        private List<float> odcinek;

        //dostęp do właściwości
        public int IleOdcinkow
        {
            set{n= value;//ustaw ile docinków ma figura
                odcinek.Clear();//czyśc liste odcinków
                //ustaw długosci odcinko na zero
                for (int i = 0; i < n; i++) odcinek.Add(0);
            }
            get{ return n;}//zwróć ilość odcinków 
        }
        public List<float> Odcinek
        {
            get { return odcinek;}  
        }
        //konstruktor
        public Figura(int ileOdcinkow)
        {
            odcinek = new List<float>();
            IleOdcinkow= ileOdcinkow;
        }
        //destruktor
        ~Figura()
        {
            odcinek.Clear();
            odcinek = null;
        }
        //metody
        public void UstawDlugosc(int i,float dlugosc)
        {
            if (i < odcinek.Count)
                odcinek[i] = dlugosc;
            else MessageBox.Show(
                 "Figura nie ma takiej ilości odcinków",
                 "Komunikat",
                 MessageBoxButtons.OK,
                 MessageBoxIcon.Error
                );
        }
        //ustaw losowe dlugosci boków
        public void UstawLosoweDlugosciBokow()
        {
            Random los=new Random();
            for (int i = 0; i < n; i++)
                UstawDlugosc(i, (float)los.NextDouble()*100+1);
        }
    }
}
Układ okresowy- kod qr
Układ okresowy

Układ okresowy pierwiastków- darmowa aplikacja na Androida

Pobierz ze sklepu Google Play
Alkomat- wirtualny test kod qr
Alkomat- wirtualny test

Alkomat- darmowa aplikacja na Androida

Pobierz ze sklepu Google Play
Taklarz- olinowanie stałe kod qr
Olinowanie stałe- kalkulator średnic

Olinowanie stałe- darmowa aplikacja na Androida

Pobierz ze sklepu Google Play
przepis na gogfry

Przepis na gofry

zobacz
przepis na bitą śmietanę

Przepis na bitą śmietanę

zobacz