4(9)-дәріс. Қасиеттер, әдіс параметрлерінің ref және out модификаторлары


Параметрдің out модификаторын қолдану



бет2/3
Дата18.10.2023
өлшемі87,96 Kb.
#118728
түріПрограмма
1   2   3
Байланысты:
4mm дәрісМ ref out

Параметрдің out модификаторын қолдану. Кейде сілтемелі параметр әдіске мән беру үшін емес, одан мән алу үшін қолданылады. Мысалы, белгілі бір функцияны орындап, тек мән қайтаратын әдіс бар делік (желілік сокетті ашып, одан желі операциясының дұрыс немес қате орындалғаны жайлы сілтемелік параметр түрінде мәлімет алу керек).
Мұнда әдіске мәлімет берілмейді, бірақ ол белгілі бір жұмысты орындап, мән қайтаруы тиіс. Бұған дейінгі ref типіндегі параметр әдісті шақыру үшін оған мән беруді талап ететін болатын. Сондықтан, осы айтылған шектеулерді болдыр­мас үшін, C# тілінде – параметрдің out модификаторын пайдалану қарастырылған.
Параметрдің out модификаторы ref түйінді сөзіне ұқсас, тек бір айырмасы бар: ол әдістен мән қайтарып береді, бірақ мән қабылдап алмайды. Сондықтан out параметрі ретінде қолданылатын айнымалыға мән беру қажет емес.
Оған қоса, мұндағы әдісте out параметрі инициалданбайтын болып саналады. Бұл әдістің қайтаратын параметріне ол жұмысын аяқтағанша мән берілуі тиіс. Сонымен, әдіс шақырылған соң, out параметріне белгілі бір мәні берілуі керек.
Келесі мысалда нақты санның бүтіні мен бөлшегін жеке-жеке бөліп алу үшін OutJarialau класындағы Bolshektеu() әдісі пайдаланылады. Берілген санның әрбір бөлігінің әдістен қалай қайтарылатын көруге болады.
using System;
using System.Text;
namespace Mysal
{
class OutJarialau
{
// Нақты санның бүтіні мен бөлшегін ажыратып алу.
public int Bolshekteu (double n, out double bolshek)
{
int butin; // whole – санның бүтін бөлігін береді
butin = (int)n;
bolshek = n - butin; // frac параметрі санның бөлшегін береді
return butin; // санның бүтін бөлігін қайтару
}
}

class OutQoldanu


{
static void Main(string[] args)
{
Console.OutputEncoding = Encoding.UTF8;
OutJarialau ob = new OutJarialau();
int i; double f, y=15.85;
i = ob.Bolshekteu (y, out f);
Console.WriteLine(" Берілген сан = " + y);
Console.WriteLine(" Санның бүтін бөлігі = " + i);
Console.WriteLine(" Санның бөлшек бөлігі = {0,3:f2}", f);
}
}
}
Программа нәтижесі:

Bolshektu() әдісі n санының бүтін бөлігін return операторы арқылы қайта­рады. Ал санның бөлшегі out типіндегі bolshek параметрі арқылы бөлініп алынады. Мысал көрсеткендей, out модификаторын қолдана отырып, әдістен екі мән қайтарып алдық. Осы тәсілмен әдістерден екі, үш, тіпті одан да көп мән қайтара аламыз, оған шек қойылмайды.


Ref және out модификаторларының объектілерге сілтеме жасау үшін қолда­нылуы. Ref және out модификаторларының жұмысы тек қарапайым типтерді беру­мен шектелмейді. Бұлар арқылы объектілерге сілтемелер жасауға болады. Егер ref немесе out модификаторлары сілтемені көрсетіп тұрса, онда сілтеменің өзі сілтеме арқылы берілетін болады. Мұнда әдістегі сілтеме көрсетіп тұрған объек­тіні өзгерту мүмкіндігі бар.
Келесі программада ref типіндегі сілтемелік параметрлер сілтемелер нұсқап тұрған объектілерді ауыстыра алады.
using System;
using System.Text;
namespace Mysal
{ class RefAuystru
{ int a, b;
public RefAuystru(int i, int j) { a = i; b = j; }
public void Shygaru()
{
Console.WriteLine("a: {0}, b: {1}", a, b);
}
// Бұл әдіс өз аргументтерін өзгертеді.
public void Auystru(ref RefAuystru ob1, ref RefAuystru ob2)
{ RefAuystru t;
t = ob1; ob1 = ob2; ob2 = t;
}
}

class RefAuystruQoldanu


{ static void Main()
{ Console.OutputEncoding = Encoding.UTF8;
RefAuystru x = new RefAuystru(10, 15);
RefAuystru у = new RefAuystru(20, 25);
Console.Write("Шақыруға дейінгі x: "); x.Shygaru();
Console.Write("Шақыруға дейінгі y: "); у.Shygaru();
Console.Write("Шақыру жасап тұрған объектілерді ауыстыру.");
x.Auystru(ref x, ref у);
Console.Write("\nШақырудан кейінгі x: "); x.Shygaru();
Console.Write("Шақырудан кейінгі у: "); у.Shygaru();
Console.ReadKey();
}
}
}
Программаның
нәтижесі:
Мұнда Auystru() әдісі арқылы оның екі аргументі нұсқап тұрған объектілер ауысады. Егер ref типіндегі параметрлер болмаса, онда Auystru() әдісіндегі ауыс­ты­рулар тысқары аймақта орындалмас еді. Оған көз жеткізу үшін Auystru() әдісі­нен ref типіндегі параметрлерді алып тастау қажет.



Достарыңызбен бөлісу:
1   2   3




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет