Wykonanie metody na polu interfejsu

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 ?

3

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

Jeżeli masz taki kod:

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:

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.

0

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

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)
        {
            
        }
    }
}
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:

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

to wypisze się:

Created a User!

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

0

Skąd ta metoda execute ?

0

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1