Аргыг нуух ба дахин тодорхойлолтын ялгаа

Програмчлалын c# хэл өргөн боломжтой, обьект хандлагат парадигмийг дэмждэг, том төслүүдийн боловсруулалтад өргөнөөр ашиглагддаг, маш универсал хэл. Хэлийг Microsoft хөгжүүлдэг нь л өөрөө ихийг хэлнэ. Миний бодлоор c# -ийн зарим шийдлүүдийг шууд ойлгоход хүндрэлтэй байдаг нь хэлний хийсвэрлэлттэй холбоотой байдаг болов уу. Хэлний боломжийг сайн судлан мэдэхгүйгээр сайн, хүчирхэг гэсэн утгаар төслийн үндсэн хэлээр ашиглах нь зөв биш шийдэл болов уу. Та c# хэл дээр код бичдэг, бичихээр суралцаж байгаа бол хэлний боломж, бололцоог сайн судлахыг зөвлөе.      

Виртуал аргууд, шинжүүд, Далд арга, шинжүүд хичээлүүдээр суурь классаас өвлөн авсан аргуудын ажиллагааг өөрчлөх нуух, дахин тодорхойлох гэсэн хоёр аргыг үзсэн. Эдгээр аргууд хоорондоо ямар ялгаатайг харцгаая.

Дахин тодорхойлох

class Person
{
    public string Name { get; set; }
    public Person(string name)
    {
        Name = name;
    }
    public virtual void Print()
    {
        Console.WriteLine(Name);
    }
}
class Employee : Person
{
    public string Company { get; set; }
    public Employee(string name, string company)
        : base(name)
    {
        Company = company;
    }
 
    public override void Print()
    {
        Console.WriteLine($"{Name} {Company} -д ажилладаг");
    }
}

Классуудийг програмд

Person tom = new Employee("Tom", "Microsoft");
tom.Print();        // Tom Microsoft -д ажилладаг

ашиглавал tom.Print() аргыг дуудахад tom хувьсагч Person төрлийнх хэдий ч Employee классийн Print аргын хэрэгжүүлэлт биелэгдэнэ. Компилятор виртуал аргуудтай ажиллахдаа виртуал аргуудын хүснэгтийг (Virtual Method Table эсхүл VMT) бүрдүүлдэг. Хүснэгтэд виртуал аргуудын хаягийг бичдэг. Класс бүрд өөрийн хүснэгтийг үүсгэдэг. Классийн обьект үүсэхэд компилятор обьектийн байгуулагчид VMT хүснэгт обьектийг холбох тусгай кодийг дамжуулдаг. Виртуал аргыг дуудахад обьектоос түүний VMT хүснэгтийн хаягийг аваад VMT хүснэгтээс аргын хаягийг олоод түүнд удирдлагыг шилжүүлдэг. Өөрөөр хэлбэл аргын хэрэгжүүлэлтийг сонгох үйлдэл програмийн ажиллагааны үед хийгддэг. Програмийг ажлуулах орчин эхлээд VMT хүснэгтээс хэрэгтэй аргын хаягийг авах шаардлагатай тул энэ нь програмийн ажиллагааг багахан удаашруулдаг гэдгийг тооцох хэрэгтэй.    

Нуулт

Одоо Person, Employee классуудад дахин тодорхойлолтын оронд нуултыг

class Person
{
    public string Name { get; set; }
    public Person(string name)
    {
        Name = name;
    }
 
    public void Print()
    {
        Console.WriteLine(Name);
    }
}
 
class Employee : Person
{
    public string Company { get; set; }
    public Employee(string name, string company)
            : base(name)
    {
        Company = company;
    }
    public new void Print()
    {
        Console.WriteLine($"{Name} {Company} -д ажилладаг");
    }
}

ашиглаад

Person tom = new Employee("Tom", "Microsoft");
tom.Print();        // Tom

дээрх байдлаар дуудвал юу болохыг харцгаая. Person төрлөөр илэрхийлэгдэх tom хувьсагч Employee обьектийн холбоосыг хадгална. Гэхдээ Print аргыг дуудахад Employee классийнх биш Person класст тодорхойлсон аргын хувилбар ажиллана. Яагаад гэвэл Employee класс суурь классаас өвлөн авсан Print аргыг ердөө дахин тодорхойлоогүй үнэндээ шинэ арга тодорхойлсон. Иймээс tom.Print() илэрхийллээр Person классийн Print арга дуудагдана.

Жич: Классийн арга шинжүүдийг дахин тодорхойлох, нуух ямар хэрэгтэй, хэзээ ашиглах юм гэж бодогдож магадгүй. Зарим нэгэн кодлогчид ч үүнийг ашиглаж үзээгүй байж болно. Үнэхээр төслийн архитектор, загвар зохиогчидийн даалгаварт удамшсан класст арга шинжүүдийг дахин тодорхойлох, нуух зүйл тусгагдаагүй бол кодлогч өөрөө дур мэдэн илүү хэрэгжүүлэлтийг хийж болохгүй. Та цаашдаа том төсөлд ажиллахаар болбол ийм зүйлийг ашиглах нь гарцаагүй.  

Мэдээлэл таалагдсан бол найзуудтайгаа хуваалцаарай.

  Нээгдсэн тоо: 2864 Нийтийн

Бид C# төрлийн бүрэлдхүүн хичээлүүдэд төрлийн Үйл явдлууд /Events/ ухагдхуунаас бусад гишүүдийг үзсэн. Иймээс энэ хичээлд Үйл явдлууд /Events/ ойлголтын талаар авч үзье. Үйл явдал делегат /delegate/ гэдэг ойлголт дээр суурилдаг учраас эхлээд делегат ухагдхууныг авч үзээд дараа нь үйл явдал гишүүний талаар авч үзье Delegate гэсэн үгийг монголчилбол "төлөөлөгч" гэж хэлж болох юм. Гэхдээ би делегат гэсэн нэрээр нь шууд ойлгон тогтоон авах нь илүү гэж үзлээ.

  Нээгдсэн тоо: 352 Бүртгүүлэх

Хувьсагч, нөхцөлт бүтэц, цикл, массив ойлголтуудтай танилцсан тул жижиг хэмжээний програмийг зохиох боломжтой болсон. Иймээс массивуудтай ажиллах хэдэн бодлогыг авч үзье.

Санамж. Програмчлалын хэлийг сурахад дадлага чухал үүрэгтэй. Жижиг гэлтгүй асуудлуудыг өөрөө шийдэхээс л дадлагажин код бичиж сурдаг. Эхлэн суралцагсад асуудлыг бэлэн сангууд ашиглан шийдэх гэдэг нь цаашид асуудал үүсгэх үндэс болдог. Хичээлийн жишээнүүдийг бэлэн сан ашиглан маш хурдан шийдэж болох ч чухам ямар ажиллагаануудыг хийсэнг мэдэлгүй өнгөрнө. Өөрөөр хэлбэл кодийн алгоритмийг ойлголгүй ажиллагааг шийднэ гэсэн үг. Ийм аргаар бүх асуудлыг шийдэх боломжгүй гэдэг нь тодорхой. Ер код бичих суурь бол асуудлыг шийдэх алгоритмыг зохиож сурах. Үүнд суралцахгүйгээр код бичиж сурахгүй гэдгийг сануулъя.

  Нээгдсэн тоо: 254 Нийтийн

Хадгалагч (Memento) хэв обьектын дотоод төлвийг түүний гадна гаргаж дараа нь хайрцаглалтын зарчмыг зөрчихгүйгээр обьектыг сэргээх боломжийг олгодог.

Хэвийг хаана ашиглах

  • Дараа нь сэргээх боломжтойгоор обьектын төлвийг хадгалах хэрэгтэй бол
  • Обьектын төлвийн хадгалалт хайрцаглалтын зарчмыг зөрчихгүйгээр хийгдэх хэрэгтэй бол

  Нээгдсэн тоо: 1519 Бүртгүүлэх

Өмнөх хичээлээс бид C# хэлний өгөгдлийн бүх төрлүүд утгаар (өөрөөр хэлбэл бүтцээр "struct") болон холбоосоор (өөрөөр хэлбэл классаар "class") өгөгдөх төрлүүдэд хуваагдахын дээр бас энгийн ба энгийн бус гэсэн ангилалтайг мэдэж авсан.
Энэ хичээлээр бид төрлүүд ямар үндсэн хэсгээс бүрддэг эдгээр хэсгүүд өөр хоорондоо хэрхэн харьцдаг талаар авч үзнэ. Хичээлд Өгөгдлийн төрлүүд хичээлийн жишээг ашиглах болно. C# хэлний өгөгдлийн ямарч төрөлд тэдний ямар ангилалд багтахаас үл хамааран дараах гишүүдтэй байж болно. Үүнд:

  1. Талбарууд /fields/ - Энд төрөлд удирдаж байх өгөгдлүүд хадгалагдана.
  2. Аргууд /Methods/ - Төрөл өөрийн талбарууд болон бусад өгөгдлүүд дээр хийж болох үйлдлүүд.
  3. Шинжүүд /Properties/ - Энэ бол төрлийн талбаруудтай илүү эвтэйхэн хандан ажиллах тусгай хэрэгсэл
  4. Үйл явдлууд /Events/ - Энэ нь төрөл өөртөө орсон өөрчлөлтийг бусад төрлүүдэд мэдэгдэх тусгай хэрэгсэл.
  5. Төрлийн байгуулагч /Constructor/ - Шинэ төрлийг үүсгэхэд дуудагдах тусгай арга.

Үйл явдал /event/ тодорхой үйлдэл хийгдсэн талаар системд мэдэгддэг. Хэрвээ бид энэхүү үйлдлийг ажиглах хэрэгтэй бол яг энд…

Нээгдсэн тоо : 58

 

Манай төсөл олон хуудсуудтай болон тэдгээрийн хооронд динамикаар шилжилт хийж байгаа ч тухайн үед шилжилт хийгдсэн хуудаст тохирох…

Нээгдсэн тоо : 90

 

Зочин (Visitor) паттерн классуудыг өөрчлөхгүйгээр тэдгээрийн обьектуудын үйлдлийг тодорхойлох боломжийг олгоно. Зочин хэвийг ашиглахдаа классуудын хоёр ангилалыг тодорхойлно.…

Нээгдсэн тоо : 85

 

Лямбда-илэрхийлэл нь нэргүй аргын хураангуй бичилтийг илэрхийлнэ. Лямбда-илэрхийлэл утга буцаадаг, буцаасан утгыг өөр аргын…

Нээгдсэн тоо : 203

 

Кодийн сайжруулалт /рефакторинг/ хичээлээр програмийн кодоо react -ийн зарчимд нийцүүлэн компонентод салгасан.…

Нээгдсэн тоо : 245

 

Хадгалагч (Memento) хэв обьектын дотоод төлвийг түүний гадна гаргаж дараа нь хайрцаглалтын зарчмыг зөрчихгүйгээр обьектыг сэргээх боломжийг олгодог.

Нээгдсэн тоо : 254

 

Делегаттай нэргүй арга нягт холбоотой. Нэргүй аргуудыг делегатийн хувийг үүсгэхэд ашигладаг.
Нэргүй аргуудын тодорхойлолт delegate түлхүүр үгээр…

Нээгдсэн тоо : 297

 

Математикт харилцан урвуу тоонууд гэж бий. Ямар нэгэн тооны урвуу тоог олохдоо тухайн тоог сөрөг нэг зэрэг дэвшүүлээд…

Нээгдсэн тоо : 285

 

Төсөлд react-router-dom санг оруулан чиглүүлэгчдийг бүртгүүлэн тохируулсан Санг суулган тохируулах хичээлээр бид хуудас…

Нээгдсэн тоо : 369

 
Энэ долоо хоногт

функцийн интервал дахь хамгийн бага утгыг ол.

Нээгдсэн тоо : 855

 

Зөв дөрвөн өнцөгт пирамидын өндөр 4. Хажуу ирмэг суурийн хавтгайд 30 градусын өнцгөөр налсан бол пирамидын хажуу ирмэгийг ол.

Нээгдсэн тоо : 1848

 

бол M·N=?

Нээгдсэн тоо : 1161