Եղե՞լ եք որևէ իրավիճակում, երբ չեք ցանկանում օգտագործել դասի որոշ գործառույթներ, բայց նաև այդ ֆունկցիան գրավում է հիշողության տարածքը օբյեկտների օրինակավորման միջոցով: Եթե այո, ապա դուք տեղում եք 🙌։
Ներածություն: -
Կան բազմաթիվ եղանակներ, որոնցով մենք կարող ենք նվազեցնել տարածության օգտագործումը, բայց ինտերֆեյսի օգտագործումը ամենապարզ և առաջարկվող միջոցն է: Այսպիսով, եկեք նախ հասկանանք, թե ինչ է միջերեսը:
Ինտերֆեյս: -
Ինտերֆեյսը սահմանում է պայմանագիր: Ցանկացած դաս կամ կառուցվածք, որն իրականացնում է պայմանագիրը, պետք է ապահովի միջերեսում սահմանված անդամների իրականացումը:
Այս բլոգում մենք կքննարկենք միայն ինտերֆեյսը 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. Հետևելով այս ճանապարհին և հասնելով լուսավորության գուրուից, ո՜վ Արջուն, դուք այլևս չեք ընկնի մոլորության մեջ: Այդ գիտելիքի լույսի ներքո դուք կտեսնեք, որ բոլոր կենդանի էակները միայն Գերագույնի մասեր են և իմ ներսում են: