Advertisement
simonradev

DemoClass

Feb 9th, 2017
300
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.90 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace ClassDemo
  8. {
  9.     public class DemoClass
  10.     {
  11.         public static void Main()
  12.         {
  13.             //създавам си студент с някакво име
  14.             Student newStudent = new Student("Todor");
  15.  
  16.             //тук достъпваш пропъртито като активираш Set, за да му зададеш стойност
  17.             //но няма да позволи заради проверката в Set
  18.             //newStudent.Name = "New Name";
  19.  
  20.             //тук ползваш Get, като извличаш стойността на член променливата name
  21.             //чрез пропъртито
  22.             string name = newStudent.Name;
  23.  
  24.             //Създавам друг студент без първоначално зададено име като ползвам празния овърлоуд на констуктора
  25.             Student anotherStudent = new Student();
  26.  
  27.             //Тук вече ми позволява да си извикам Set на пропъртито и няма да гръмне
  28.             //понеже член променливата hasName е false.
  29.             anotherStudent.Name = "Pesho";
  30.  
  31.             Console.WriteLine(anotherStudent.Name);
  32.         }
  33.     }
  34.  
  35.     public class Student
  36.     {
  37.         //това е член промелнива, която пази текущите състояния на обекта, но не е добра идея да даваш
  38.         //директен достъп до нея. Това е причината да ползваш и пропъртитата, за да определяш, какво и как
  39.         //да се променя според изискванията и желанията ти.
  40.         private string name;
  41.         private List<double> grades;
  42.         private bool hasName;
  43.        
  44.         //в този случай аз искам в конструктора да си задавам име на ученика,
  45.         //но след като не знам какви ще са му оценките просто създавам нов лист,
  46.         //което ще ми съкрати създаване на нов лист в Майн метода.
  47.         public Student(string name)
  48.         {
  49.             //с ключовата дума "this" достъпвам член променливите, защото ако забелязваш
  50.             //параметъра "name", който получавам е със същото име като член променливата
  51.             //това е позволено, но в рамките(блок скобите) на конструктора параметъра
  52.             //препокрива член променливата. Така за по-лесна четимост и за да разпознава
  53.             //компилатора какво искам използвам "this".
  54.  
  55.             //проверявам дали е зададено име и ако е присвоявам стойността на член променливата
  56.             //и променям hasName на true.
  57.             if (name != null)
  58.             {
  59.                 this.name = name;
  60.                 this.hasName = true;
  61.             }
  62.             this.grades = new List<double>();
  63.         }
  64.  
  65.         //това е overload, който ми позволява да не задавам начално име на ученик
  66.         //и съоветно вика другия конструктор, като му подава нулева стойност на мястото
  67.         //на името
  68.         public Student()
  69.             : this(null)
  70.         {
  71.  
  72.         }
  73.  
  74.         //пропъртито, което ползваш позволява член променливата
  75.         //да бъде манипулирана спрямо твоите желания.
  76.         public string Name
  77.         {
  78.             //Get се активира, когато използваш пропъртито/свойството отдясно на равното
  79.             //Set се активира, когато използваш пропъртито/свойството отляво на равното
  80.             //Ключовата дума "value" взема това което е отдясно на равното и го присвоява на член променливата
  81.             //в случая аз искам да се задава име само ако ученика няма зададено вече такова затова си слагам една проверка
  82.             get
  83.             {
  84.                 return this.name;
  85.             }
  86.             set
  87.             {
  88.                 if (!hasName)
  89.                 {
  90.                     this.name = value;
  91.                 }
  92.                 else
  93.                 {
  94.                     //попринцип тук може да хвърлиш ексепшън понеже се опитваш да зададеш име
  95.                     throw new InvalidOperationException("This student already has a name!");
  96.                 }
  97.             }
  98.         }
  99.  
  100.         //това пропърти ще го ползвам ако искам да си взема листа с оценките или ако искам да го презапиша или запиша.
  101.         public List<double> Grades
  102.         {
  103.             get { return this.grades; }
  104.             set { this.grades = value; }
  105.         }
  106.  
  107.         //за да си добавям оценки си пиша един метод
  108.         public void AddGrade(double grade)
  109.         {
  110.             this.grades.Add(grade);
  111.         }
  112.     }
  113. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement