MySQL Java JavaScript PHP Python HTML-CSS C-sharp

Clase și metode parțiale

Clasele pot fi parțiale. Adică putem avea mai multe fișiere cu definiția aceleiași clase, iar la compilare toate aceste definiții vor fi compilate într-una singură.

De exemplu, vom defini în proiect două fișiere cu cod. Nu este atât de important cum vor fi numite aceste fișiere. De exemplu, PersonBase.cs și PersonAdditional.cs. Într-unul dintre aceste fișiere (nu contează în care anume) vom defini următoarea clasă:

public partial class Person
{
   public void Move()
   {
       Console.WriteLine("I am moving");
   }
}

Iar în celălalt fișier vom defini următoarea clasă:

public partial class Person
{
   public void Eat()
   {
       Console.WriteLine("I am eating");
   }
}

Astfel, două fișiere din proiect conțin definiția aceleași clase Person, care conțin două metode diferite. Și ambele clase definite aici sunt parțiale. Pentru aceasta, ele sunt definite cu cuvântul cheie partial.

Apoi putem folosi toate metodele clasei Person:

class Program
{
   static void Main(string[] args)
   {
       Person tom = new Person();
       tom.Move();
       tom.Eat();

       Console.ReadKey();
   }
}

Metode parțiale

Clasele parțiale pot conține metode parțiale. Astfel de metode sunt, de asemenea, definite cu cuvântul cheie partial. De fapt, definiția metodei parțiale fără corpul metodei se află într-o clasă parțială, iar implementarea acestei metode se află în altă clasă parțială.

De exemplu, să modificăm clasele Person definite mai sus. Prima clasă:

public partial class Person
{
   partial void Read();
   public void DoSomething()
   {
       Read();
   }
}

A doua clasă:

public partial class Person
{
   partial void Read()
   {
       Console.WriteLine("I am reading a book");
   }
}

În prima clasă este definită metoda Read(). De fapt, în momentul definirii primei clase nu este cunoscut ce reprezintă această metodă, ce acțiuni va îndeplini. Cu toate acestea, știm lista parametrilor săi și o putem apela în prima clasă.

A doua clasă definește direct corpul metodei Read().

class Program
{
   static void Main(string[] args)
   {
       Person tom = new Person();
       tom.DoSomething();
   }
}

Este de remarcat faptul că, în mod implicit, metodelor parțiale li se aplică o serie de restricții:

  • ele nu pot avea modificatori de acces
  • ele au tipul void
  • ele nu pot avea parametri de tip out
  • ele nu pot avea modificatorii virtual, override, sealed, new sau extern

Dacă nu respectă vreuna dintre aceste restricții, trebuie să li se ofere o implementare. De exemplu, în următorul exemplu, metodele parțiale aplică modificatorul public:

// prima implementare a clasei și a metodelor sale
public partial class Person
{
   public partial void Read();
   public void DoSomething()
   {
       Read();
   }
}

// a doua implementare a clasei și a metodelor sale
public partial class Person
{
   public partial void Read()
   {
       Console.WriteLine("I am reading a book");
   }
}
← Lecția anterioară Lecția următoare →