Middle
Hansı hallarda interfeys istifadə edilməlidir və hansı hallarda abstrakt sinif?
sobes.tech Süni İntellekt
AI-dan cavab
İşlev davranış müqaviləsini müəyyən etmək üçün interfeyslərdən istifadə edin, bu, sinflər tərəfindən həyata keçirilə bilər. Bu, çox formallıq əldə etməyə imkan verir və sinflər arasındakı əlaqəni zəiflədir. Bir sinif çoxlu interfeyslərə sahib ola bilər, lakin yalnız bir əsas sinif.
Ümumi funksionallığın bir hissəsinin həyata keçirilməsi və törəmə sinflər üçün əsas struktur təmin etmək istədiyiniz zaman abstrakt siniflərdən istifadə edin. Abstrakt siniflər abstrakt və adi metodlar, həmçinin sahələr içərə bilər. "ol" tələb olunan irsiyyət üçün uyğundur.
| Xüsusiyyət | İnterfeys | Abstrakt sinif |
|---|---|---|
| Çoxlu irsiyyət | Bəli | Xeyr |
| Həyata keçirmə | Xeyr ( .NET 8-ə qədər standart interfeys metodları ilə) | Bəli, qismən və ya tam |
| Sahələr | Xeyr | Bəli |
| Konstruktorlar | Xeyr | Bəli |
| Əlaqə növü | " edə bilər" ("has-a") | "dır" ("is-a") |
İnterfeys istifadəsinə nümunə:
// Uçmaq qabiliyyətinə malik obyektlər üçün müqaviləni müəyyən edirik
public interface IFlyable
{
void Fly();
}
// Təyyarə sinfi IFlyable interfeysini həyata keçirir
public class Airplane : IFlyable
{
public void Fly()
{
// Təyyarənin uçuşunun həyata keçirilməsi
Console.WriteLine("Təyyarə uçur");
}
}
// Quş sinfi də IFlyable interfeysini həyata keçirir
public class Bird : IFlyable
{
public void Fly()
{
// Quşun uçuşunun həyata keçirilməsi
Console.WriteLine("Quş uçur");
}
}
Abstrakt sinif istifadəsinə nümunə:
// Ümumi nəfəs alma həyata keçirən abstrakt sinif Animal
public abstract class Animal
{
public void Breathe()
{
Console.WriteLine("Heyvan nəfəs alır");
}
// Törəmə sinflər tərəfindən həyata keçirilməli olan abstrakt metod
public abstract void MakeSound();
}
// Animal-dən törəyən konkret it sinfi
public class Dog : Animal
{
public override void MakeSound()
{
Console.WriteLine("Hau!");
}
}
// Animal-dən törəyən konkret pişik sinfi
public class Cat : Animal
{
public override void MakeSound()
{
Console.WriteLine("Miyav!");
}
}