Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace ClassDemo
- {
- public class DemoClass
- {
- public static void Main()
- {
- //създавам си студент с някакво име
- Student newStudent = new Student("Todor");
- //тук достъпваш пропъртито като активираш Set, за да му зададеш стойност
- //но няма да позволи заради проверката в Set
- //newStudent.Name = "New Name";
- //тук ползваш Get, като извличаш стойността на член променливата name
- //чрез пропъртито
- string name = newStudent.Name;
- //Създавам друг студент без първоначално зададено име като ползвам празния овърлоуд на констуктора
- Student anotherStudent = new Student();
- //Тук вече ми позволява да си извикам Set на пропъртито и няма да гръмне
- //понеже член променливата hasName е false.
- anotherStudent.Name = "Pesho";
- Console.WriteLine(anotherStudent.Name);
- }
- }
- public class Student
- {
- //това е член промелнива, която пази текущите състояния на обекта, но не е добра идея да даваш
- //директен достъп до нея. Това е причината да ползваш и пропъртитата, за да определяш, какво и как
- //да се променя според изискванията и желанията ти.
- private string name;
- private List<double> grades;
- private bool hasName;
- //в този случай аз искам в конструктора да си задавам име на ученика,
- //но след като не знам какви ще са му оценките просто създавам нов лист,
- //което ще ми съкрати създаване на нов лист в Майн метода.
- public Student(string name)
- {
- //с ключовата дума "this" достъпвам член променливите, защото ако забелязваш
- //параметъра "name", който получавам е със същото име като член променливата
- //това е позволено, но в рамките(блок скобите) на конструктора параметъра
- //препокрива член променливата. Така за по-лесна четимост и за да разпознава
- //компилатора какво искам използвам "this".
- //проверявам дали е зададено име и ако е присвоявам стойността на член променливата
- //и променям hasName на true.
- if (name != null)
- {
- this.name = name;
- this.hasName = true;
- }
- this.grades = new List<double>();
- }
- //това е overload, който ми позволява да не задавам начално име на ученик
- //и съоветно вика другия конструктор, като му подава нулева стойност на мястото
- //на името
- public Student()
- : this(null)
- {
- }
- //пропъртито, което ползваш позволява член променливата
- //да бъде манипулирана спрямо твоите желания.
- public string Name
- {
- //Get се активира, когато използваш пропъртито/свойството отдясно на равното
- //Set се активира, когато използваш пропъртито/свойството отляво на равното
- //Ключовата дума "value" взема това което е отдясно на равното и го присвоява на член променливата
- //в случая аз искам да се задава име само ако ученика няма зададено вече такова затова си слагам една проверка
- get
- {
- return this.name;
- }
- set
- {
- if (!hasName)
- {
- this.name = value;
- }
- else
- {
- //попринцип тук може да хвърлиш ексепшън понеже се опитваш да зададеш име
- throw new InvalidOperationException("This student already has a name!");
- }
- }
- }
- //това пропърти ще го ползвам ако искам да си взема листа с оценките или ако искам да го презапиша или запиша.
- public List<double> Grades
- {
- get { return this.grades; }
- set { this.grades = value; }
- }
- //за да си добавям оценки си пиша един метод
- public void AddGrade(double grade)
- {
- this.grades.Add(grade);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement