Եղե՞լ եք որևէ իրավիճակում, երբ չեք ցանկանում օգտագործել դասի որոշ գործառույթներ, բայց նաև այդ ֆունկցիան գրավում է հիշողության տարածքը օբյեկտների օրինակավորման միջոցով: Եթե ​​այո, ապա դուք տեղում եք 🙌։

Ներածություն: -

Կան բազմաթիվ եղանակներ, որոնցով մենք կարող ենք նվազեցնել տարածության օգտագործումը, բայց ինտերֆեյսի օգտագործումը ամենապարզ և առաջարկվող միջոցն է: Այսպիսով, եկեք նախ հասկանանք, թե ինչ է միջերեսը:

Ինտերֆեյս: -

Ինտերֆեյսը սահմանում է պայմանագիր: Ցանկացած դաս կամ կառուցվածք, որն իրականացնում է պայմանագիրը, պետք է ապահովի միջերեսում սահմանված անդամների իրականացումը:

Այս բլոգում մենք կքննարկենք միայն ինտերֆեյսը C#-ով, սակայն լուծումը կիրառելի է բոլոր OOP լեզուներով:

Դասի օրինակում.

Հիմա եկեք հասկանանք, թե ինչպես է կատարվում հիշողության բաշխումը դասի հատկություններին: Երբ մենք ներկայացնում ենք դասը, մենք ստեղծում ենք օբյեկտ և այդ օբյեկտը պահում է դասի հատկությունների հիշողության հասցեն:

Օրինակ:

Ընկերության դաս.-

public class Company
    {
        public IDictionary<string, string> GetOpenPositions()
        {
            IDictionary<string, string> openPostions = new Dictionary<string, string>()
            {
                {"Job-123","Software Developer- Java" },
                {"Job-124","Oracle Adminstrator" },
                {"Job-125","Asp.Net Full Stack Developer" },
                {"Job-126","MEAN Stack Developer" },
            };
            return openPostions;
        }

        public double GetSalary(int empId)
        {
            IDictionary<int, double> staffSalary = new Dictionary<int, double>()
            {
                {1,20000},
                {2,80000},
                {3,200000},
                {4,200000},
                {5,250000},
            };

            if (staffSalary.TryGetValue(empId, out double salary)) {
                return salary;
            }
            return 0;

        }

        public IDictionary<string, string> InternalPositions()
        {
            IDictionary<string, string> openPostions = new Dictionary<string, string>()
            {
                {"Job-123","Software Developer- Java" },
                {"Job-124","Oracle Adminstrator" },
                {"Job-125","Asp.Net Full Stack Developer" },
                {"Job-126","MEAN Stack Developer" },
                {"Job-127","MERN Stack Developer" },
            };
            return openPostions;
        }
    }

Վերոնշյալ կոդում մենք ստեղծել ենք դաս և տրամադրել ենք երեք կոնկրետ մեթոդ՝ InternalPositions, GetSalary, GetOpenPositions:

MainService դաս.-

    public  class MainService
    {
        public IDictionary<string, string> GetBothTheDetailsUsingClassInstantiation() {
            Company company = new Company();
            var openPostionsForCandidate = company.GetOpenPositions();
            var opendPostions = company.InternalPositions();
            var salary = company.GetSalary(2);
            return opendPostions;
        }
    }

Այստեղ մենք ավելացրել ենք նոր դաս, որը կոչվում է MainService, որն ունի GetBothTheDetailsUsingClassInstantiation մեթոդ: Այս մեթոդը ներկայացնում է «Company» դասը և կոչում է բոլոր երեք մեթոդները:

Ընթացիկ սցենարում սա լավ է թվում, բայց ասենք, որ ես պարզապես ուզում եմ զանգահարել GetOpenPositions մեթոդը, այլ մեթոդներ են պահանջվում, երբ աշխատակիցն օգտագործում է հավելվածը: Այժմ այս մոտեցման խնդիրն այն է, որ այն բեռնում է նաև այլ մեթոդներ հիշողության մեջ, և որոշ պահեստավորում հատկացվում է այդ մեթոդներին, որն ավելորդ է:

Այսպիսով, վերը նշված խնդիրը լուծելու համար մենք կօգտագործենք բազմակի ժառանգություն միջերեսների միջոցով:

Իթեկնածուի միջերես.-

public interface ICandidate
    {
        public IDictionary<string, string> GetOpenPositions();
    }

Այստեղ վերը նշված կոդում մենք ավելացրել ենք ICandidate ինտերֆեյս՝ հայտարարված GetOpenPostions մեթոդով: Որը կարելի է անվանել, երբ թեկնածուն օգտագործում է դիմումը:

IEmployee ինտերֆեյս.

public interface IEmployee
    {
        public double GetSalary(int empId);
        public IDictionary<string,string> InternalPositions();

    }

Վերոնշյալ կոդում մենք ավելացրել ենք IEmployee ինտերֆեյսը GetSalary-ով և հայտարարված InternalPositions մեթոդով: Այն կարող է կանչվել, երբ Աշխատակիցն օգտագործում է հավելվածը

Ընկերության դաս:-

Այժմ եկեք փոփոխենք Ընկերության դասը և իրականացնենք երկու ինտերֆեյսները, ինչպես ստորև:

public class Company : IEmployee, ICandidate
    {
        public IDictionary<string, string> GetOpenPositions()
        {
            IDictionary<string, string> openPostions = new Dictionary<string, string>()
            {
                {"Job-123","Software Developer- Java" },
                {"Job-124","Oracle Adminstrator" },
                {"Job-125","Asp.Net Full Stack Developer" },
                {"Job-126","MEAN Stack Developer" },
            };
            return openPostions;
        }

        public double GetSalary(int empId)
        {
            IDictionary<int, double> staffSalary = new Dictionary<int, double>()
            {
                {1,20000},
                {2,80000},
                {3,200000},
                {4,200000},
                {5,250000},
            };

            if (staffSalary.TryGetValue(empId, out double salary)) {
                return salary;
            }
            return 0;

        }

        public IDictionary<string, string> InternalPositions()
        {
            IDictionary<string, string> openPostions = new Dictionary<string, string>()
            {
                {"Job-123","Software Developer- Java" },
                {"Job-124","Oracle Adminstrator" },
                {"Job-125","Asp.Net Full Stack Developer" },
                {"Job-126","MEAN Stack Developer" },
                {"Job-127","MERN Stack Developer" },
            };
            return openPostions;
        }
    }

MainService դաս.-

Այժմ եկեք փոփոխենք նաև MainService դասը և ստեղծենք Ընկերության դասը երկու ինտերֆեյսներով:

public  class MainService
    {
      
        public IDictionary<string,string> GetOnlyCandidateDetails() {
            var before = GC.GetTotalMemory(true);
            ICandidate candidate = new Company();
            var after = GC.GetTotalMemory(true);
            Console.WriteLine($"Total size occuppied by {nameof(GetOnlyCandidateDetails)} is {after - before}");
            var opendPostions = candidate.GetOpenPositions();
            return opendPostions;
        }
      
        public IDictionary<string, string> GetOnlyEmployeeDetails() {
            var before = GC.GetTotalMemory(true);
            IEmployee employee = new Company();
            var after = GC.GetTotalMemory(true);
            Console.WriteLine($"Total size occuppied by {nameof(GetOnlyEmployeeDetails)} is {after - before}");
            var opendPostions = employee.InternalPositions();
            var salary = employee.GetSalary(2);
            return opendPostions;
        }
      
        public IDictionary<string, string> GetBothTheDetailsUsingClassInstantiation() {
            var before = GC.GetTotalMemory(true);
            Company company = new Company();
            var after=GC.GetTotalMemory(true);
            Console.WriteLine($"Total size occuppied by {nameof(GetBothTheDetailsUsingClassInstantiation)} is {after - before}");
            var openPostionsForCandidate = company.GetOpenPositions();
           
            return openPostionsForCandidate;

        }
    }

Ելք.-

Ստորև բերված է ելքը, որտեղ պարզ է, որ դասի օրինակումը ավելի շատ տարածք է ստանում, քան Ինտերֆեյսի օրինակումը, քանի որ դասի օբյեկտը պետք է բեռնի բոլոր երեք մեթոդները, բայց Interface-ում մենք ունենք բեռնելու ավելի քիչ մեթոդներ:

Շնորհակալություն կարդալու համար խնդրում ենք մեկնաբանել ձեր առաջարկները, կիսվել հոդվածով, հետևել ինձ և Abhima C# Programming հրատարակությանը:

Բհագավադ Գիտա Գլուխ 4, հատված 35

यज्ज्ञात्वा न पुनर्मोहमेवं यास्यसि पाण्डव |

येन भूतान्यशेषेण द्रक्ष्यस्यात्मन्यथो मयि || 35||

BG 4.35. Հետևելով այս ճանապարհին և հասնելով լուսավորության գուրուից, ո՜վ Արջուն, դուք այլևս չեք ընկնի մոլորության մեջ: Այդ գիտելիքի լույսի ներքո դուք կտեսնեք, որ բոլոր կենդանի էակները միայն Գերագույնի մասեր են և իմ ներսում են: