Метод (програмиране): Разлика между версии

Изтрито е съдържание Добавено е съдържание
м интервал след точка в текст
Xqbot (беседа | приноси)
м Bot: Replace deprecated <source> tag and "enclose" parameter
Ред 3:
 
Най-простият пример за метод е "'''Main(…)'''", който винаги го декларираме между отварящата и затварящата скоба на нашия клас:
<sourcesyntaxhighlight lang="csharp">
class HelloCSharp
{ // Отваряща скоба на класа
Ред 12:
}
} // Затваряща скоба на класа
</syntaxhighlight>
</source>
 
== Къде е позволено да декларираме метод ==
Всеки '''[[Клас (програмиране)|клас]] (class)''' има отваряща и затваряща фигурни скоби – "{" и "}", между който се пише програмният код. Даден метод може да съществува само ако е деклариран '''между''' отварящата "{" и затварящата "}" скоба на даден клас. Също така допълнително изискване, е методът да бъде деклариран '''извън''' имплементацията на друг метод.
Ето и още един но по-сложен пример как се ползват методите и къде се декларират. Тази програма при въвеждане на две числа изкарва по-голямото, а кода за намиране на по-голямото число е изкаран в отделен '''''метод''''' (GetMaxCalculation):
<sourcesyntaxhighlight lang="csharp">
using System;
 
Ред 51:
}
} // Затваряща скоба на класа
</syntaxhighlight>
</source>
 
Методите могат да бъдат декларирани с и без параметър. Горният пример е на метод деклариран с два параметъра, т.е. internal static double GetMaxCalculation'''(double firstNumber, double secondNumber)'''. Пример на метод без параметри е:
 
<sourcesyntaxhighlight lang="csharp">
static int countNumber = 10;
internal static void PrintFirstOddNumbers()
Ред 67:
}
}
</syntaxhighlight>
</source>
 
== Извикване на метод от друг клас ==
За да извикаме метод дефиниран в един клас от друг, то тогава той трябва да е или internal (достъпван само в съответното assembly) или public. Достъпът до метода става чрез името на класа. Private методи са видими само в съответния клас и не могат да бъдат достъпвани от друг.
 
<sourcesyntaxhighlight lang="csharp">
using System;
 
Ред 79:
double maxValue = GetMax.GetMaxCalculation(1.02, 3);
}
</syntaxhighlight>
</source>
 
Ако искаме да разберем кой метод извиква нашият код може да използваме StackTrace(using System.Diagnostics;).
 
<sourcesyntaxhighlight lang="csharp">
StackTrace stackTrace = new StackTrace();
var traceMethod = stackTrace.GetFrame(1).GetMethod().Name;
</syntaxhighlight>
</source>
 
По този начин получаваме името на метода който извиква.
Ред 113:
Overriding може да се приложи при унаследени методи, събития които са или abstract, или virtual. Използва се за да разшири или промени функционалността на метода.
 
<sourcesyntaxhighlight lang="csharp">
public abstract class Shape
{
Ред 132:
}
}
</syntaxhighlight>
</source>
 
Може да се използва както за наши собствени методи, така и за методи които са стандартни за .NET като пример toString()
<sourcesyntaxhighlight lang="csharp">
public override string ToString()
{
Ред 141:
return student;
}
</syntaxhighlight>
</source>
 
== Специални методи ==
Ред 157:
Пример за дефиниран от програмиста конструктор в C#:
 
<sourcesyntaxhighlight lang="csharp">
class MyClass
{
Ред 173:
}
}
</syntaxhighlight>
</source>
 
=== Деструктори ===
Ред 182:
Но за разлика от паметта, заети други ресурси — например мрежови връзки, файлове или заявки към бази данни — не се освобождават от garbage collector-а и за тяхното освобождаване трябва да се предприемат някакви мерки. Най-често се ползва using структурата, която автоматично затваря всички връзки щом като се изпълни using блока. Пример:
 
<sourcesyntaxhighlight lang="csharp">
using (StreamReader reader = new StreamReader("input.txt"))
{
Ред 188:
}// тук файла се затваря автоматично и всички ресурси свързани с работата му се освобождават
reader.ReadLine(); // тази команда ще предизвика грешка, тъй като файла вече не е на разположение
</syntaxhighlight>
</source>
 
=== Методи за присвояване ===
Ред 197:
Примерно за дефиниран от потребителя клас, операцията събиране (+) може да бъде предефинирана, така че да се извършат специфични действия, когато тази операция се използва върху два обекта от този клас.
 
<sourcesyntaxhighlight lang="csharp">
class MyClass
{
Ред 220:
}
}
</syntaxhighlight>
</source>
 
== Литература ==