Wykonanie metody na polu interfejsu

Wykonanie metody na polu interfejsu
  • Rejestracja: dni
  • Ostatnio: dni
0

Chciałbym się poradzić w kwestii związanej z interfejsem.

Zakładając, że mam interfejs IUser i w nim np. metode createUser(). Mam klasę User.cs, która implementuje ten interfejs.

I teraz jeśli np. w kontrolerze mam pole typu IUser i potem na tym polu wywołuje metodę createUser() to ta metoda wykona się w taki sposób jak jest zaimplementowana w klasie User.cs ?

Ktos
  • Rejestracja: dni
  • Ostatnio: dni
3

Tak, oczywiście. To jest właśnie polimorfizm.

Jeżeli masz taki kod:

Kopiuj
using System;

namespace dd
{
    interface IUser
    {
        void CreateUser();
    }

    class User : IUser
    {
        public void CreateUser()
        {
            Console.WriteLine("Created a User!");
        }
    }

    class SuperUser : IUser
    {
        public void CreateUser()
        {
            Console.WriteLine("Created a SuperUser!");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            IUser user = new User();
            IUser user2 = new SuperUser();

            user.CreateUser();
            user2.CreateUser();

        }
    }
}

To wynik jest następujący:

Kopiuj
Created a User!
Created a SuperUser!

Czyli ogólnie mówiąc: w przypadku interfejsów wiesz tylko, że klasa posiada pewną metodę, ale jak sobie ona to zrealizuje - nie wiesz, ale na pewno zrobi to po swojemu.

  • Rejestracja: dni
  • Ostatnio: dni
0

A co będzie wykonane w tym przypadku ? Może tak być ?

Kopiuj
using System;
 
namespace dd
{
    interface IUser
    {
        void CreateUser();
    }
 
    class User : IUser
    {
        public void CreateUser()
        {
            Console.WriteLine("Created a User!");
        }
    }
   class Example 
   {
      private IUser _user;
      public Example(IUser user)
      {
            _user = user;
      }
     public void Execute()
     {
          _user.CreateUser();
     }
  }
class Program
    {
        static void Main(string[] args)
        {
            
        }
    }
}
V0
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 47
0

Może tak być, w zależności od tego jaką implementacje wstrzykniesz do klasy Example taka implementacja CreateUser() się wykona. W twoim przypadku jest tylko jedna więc jeżeli będziesz miał w metodzie Main:

Kopiuj
IUser user = new User();
Example example = new Example(user);
example.Execute();

to wypisze się:

Kopiuj
Created a User!

Dlatego, że przekazałeś obiekt który ma taką, a nie inną implementacje.

  • Rejestracja: dni
  • Ostatnio: dni
0

Skąd ta metoda execute ?

V0
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 47
0

Z klasy Example, sam ją napisałeś...

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.