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

Програмчлалын 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 арга дуудагдана.

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

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

  Нээгдсэн тоо: 2369 Төлбөртэй

Exception бол програмчлалын олон хэлэнд байдаг алдааг боловсруулах стандарт механизм. Хичээлээр С# дээр алдааны боловсруулалтыг хэрхэн үүсгэн хэрэгжүүлэхийг авч үзнэ. Та дэлгэц дээрээсээ харж байгаа код бол хийж болохгүй аргачлалын тод жишээ байгаа.

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

Нэг ерөнхийлөлтэй класс өөр ерөнхийлөлтэй классаас удамшиж болно. Ингэхдээ удамшилтын төрөл бүрийн хувилбаруудыг ашиглах боломжтой.   
Бидэнд дараах суурь

class Person<T>
{
    public T Id { get;}
    public Person(T id)
    {
        Id = id;
    }
}

Person класс байлаа гэе.

  Нээгдсэн тоо: 511 Төлбөртэй

Програмчлалын хэлний суурь бүрдүүлэгчдийг нэг бол тодорхой нөхцлөөс хамааран програмын кодийн ажиллагааны дарааллыг өөрчлөх нөхцлийн бүтэц юм. C# хэлний ийм бүтцүүдийн нэг бол if..else бүтэц.
if..else бүтэц нөхцлийн үнэн эсэхийг шалгаад үр дүнгээс хамааран тодорхой кодийг биелүүлдэг. Бүтцийн энгийн хэлбэр if блокоос бүрдэнэ.

if(нөхцөл)
{
    биелэгдэх командууд
}

  Нээгдсэн тоо: 1796 Төлбөртэй

Лямбда илэрхийлэл хичээлээс та лямбда илэрхийлэл гэж юу болохыг ойлгосон гэж бодож байна. Энэ хичээлээр түүнийг хэрхэн ашиглах жишээг авч үзэцгээе. C# -д лямбда илэрхийлэл бүрэн хэмжээний өгөгдлийн төрөл учраас түүнийг аргад дамжуулах, буцаан авах, нэг лямбдаг өөр лямбдад дамжуулах гэх мэтээр ердийн хувьсагчид хийгдэх бүх үйлдлийг хийж болно.

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

 

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

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

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

Хоёр тойрог гадна талаараа шүргэлцсэн. Нэг тойргийн шүргэгч нь нөгөө тойргийнхоо төвийг дайран гарсан. Шүргэлтийн цэгээс хоёрдахь тойргийн төв хүртэлх зай нь энэ тойргийн радиусаас 3 дахин урт. Нэгдүгээр тойргийн урт хоёрдугаар тойргийн уртаас хэд дахин их вэ?

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

 

тэгшитгэлийг бод.

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

 

бол илэрхийллийн утгыг ол.

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