Рубрики

C # | Как использовать интерфейс ссылки

В C # вам разрешено создавать ссылочную переменную типа интерфейса или, другими словами, вам разрешается создавать ссылочную переменную интерфейса. Переменная такого типа может ссылаться на любой объект, который реализует его интерфейс. Ссылочная переменная интерфейса знает только те методы, которые объявлены ее объявлением интерфейса. Он не позволяет получить доступ к любым другим переменным или методам, которые могут поддерживаться объектами . Эта концепция аналогична, когда вы используете ссылку на родительский класс для доступа к объекту дочернего класса.

Ниже приведены примеры, иллюстрирующие концепцию интерфейса ссылок:

Пример 1:

// C # программа для иллюстрации
// концепция интерфейса ссылок

using System;

  
// объявление интерфейса

public interface Race {

      

    // объявление абстрактных методов

    // интерфейс, который будет реализован

    // классом, который наследует интерфейс

    void Speed(int s);

    void Distance(int d);

}

  
// интерфейс реализации класса

public class Person1 : Race {

      

    int sp1, di1;

      

    // абстрактный метод

    // Гоночный интерфейс

    public void Speed(int p1s) {

          

        sp1 = p1s;

        Console.WriteLine("Speed Method implemented by Person1");

          

    }

      

    // абстрактный метод

    // Гоночный интерфейс

    public void Distance(int p1d) {

          

        di1 = p1d;

        Console.WriteLine("Distance Method implemented by Person1");

          

    }

      

    // метод класса Person1

    public void display1() {

          

        Console.WriteLine("The Speed of 1st person is: "+sp1);

        Console.WriteLine("The distance covered by 1st person is: "+di1);

          

    }

      
}

  
// интерфейс реализации класса

public class Person2 : Race {

      

    int sp2, di2;

      

    // абстрактный метод

    // Гоночный интерфейс

    public void Speed(int p2s) {

          

        sp2 = p2s;

        Console.WriteLine("Speed Method implemented by Person2");

          

    }

      

    // абстрактный метод

    // Гоночный интерфейс

    public void Distance(int p2d) {

          

        di2 = p2d;

        Console.WriteLine("Distance Method implemented by Person2");

          

    }

      

    // метод класса Person2

    public void display2() {

          

        Console.WriteLine("The Speed of 2nd person is: "+sp2);

        Console.WriteLine("The distance covered by 2nd person is: "+di2);

          

    }

      
}

  
// Класс водителя

public class GFG {

      

    // Основной метод

    public static void Main(String []args) {

          

        // создаем экземпляр класса Person1

        Person1 obj1 = new Person1();

          

        // создаем экземпляр класса Person2

        Person2 obj2 = new Person2();

          

        // создаем ссылку

        // интерфейса Race

        Race r;

          

        // ----- для класса Person1 ----------

          

        // присваиваем объект Person1 'obj1'

        // для интерфейса Ссылка 'r'

        r = obj1;

          

        // Теперь вы можете получить доступ к абстрактному методу

        // интерфейса Race, который реализован

        // по классу Person1

        r.Speed(10);

        r.Distance(50);

  

        // если вы попытаетесь вызвать display1 ()

        // метод, использующий 'r', выдаст ошибку

        //r.display1 ();

          

        // вызов display1 ()

        // метод класса Person1

        obj1.display1();

          

        // ----- для класса Person2 ----------

          

        // присваиваем объект Person2 'obj2'

        // для интерфейса Ссылка 'r'

        r = obj2;

          

        // Теперь вы можете получить доступ к абстрактному методу

        // интерфейса Race, который реализован

        // по классу Person2

        r.Speed(15);

        r.Distance(45);

  

        // если вы попытаетесь вызвать display2 ()

        // метод, использующий 'r', выдаст ошибку

        //r.display2 ();

          

        // вызов display1 ()

        // метод класса Person1

        obj2.display2();

          

    }

      
}

Выход:

Speed Method implemented by Person1
Distance Method implemented by Person1
The Speed of 1st person is: 10
The distance covered by 1st person is: 50
Speed Method implemented by Person2
Distance Method implemented by Person2
The Speed of 2nd person is: 15
The distance covered by 2nd person is: 45

Объяснение: В приведенном выше примере у нас есть интерфейс с именем Race и два класса Person1 и Person2, которые реализуют методы интерфейса. Класс Person1 имеет свой собственный метод с именем display1 () и аналогичный класс Person2 имеет свой собственный метод display2 (), который нельзя вызвать с помощью ссылки на интерфейс. Чтобы вызвать методы, используя ссылку на интерфейс (здесь r — ссылка на интерфейс), вам необходимо присвоить ему объект класса. Например, если вы назначаете объект Person1 obj1 для r, т.е. r = obj1; затем вы вызываете методы Speed () и Distance () , которые реализуются классом Person1 . Чтобы вызвать метод display1 () , вы должны использовать obj1. Аналогично, используя r = obj2; мы вызываем методы класса Person2 .

Пример 2:

// C # программа для иллюстрации
// концепция интерфейса ссылок

using System;

  
// объявление интерфейса

interface Vehicle {

  

    // все абстрактные методы.

    void changeGear(int a);

    void speedUp(int a);

    void applyBrakes(int a);

    void printStates();

}

  
// класс реализует интерфейс

class Bicycle : Vehicle {

  

    int speed;

    int gear;

  

    // переключить передачу

    public void changeGear(int newGear)

    {

  

        gear = newGear;

    }

  

    // увеличить скорость

    public void speedUp(int increment)

    {

  

        speed = speed + increment;

    }

  

    // уменьшить скорость

    public void applyBrakes(int decrement)

    {

  

        speed = speed - decrement;

    }

  

    public void printStates()

    {

        Console.WriteLine("speed: " + speed + " gear: " + gear);

    }

}

  
// Класс водителя

class GFG {

  

    // Основной метод

    public static void Main(String[] args)

    {

  

        // создаем экземпляр Bicycle

        Bicycle bicycle = new Bicycle();

  

        // Создание ссылок на интерфейс

        Vehicle obj;

  

        // присваиваем объект Bicycle 'bike'

        // для интерфейса Ссылка 'obj'

        obj = bicycle;

  

        // вызов абстрактных методов

        // реализовано классом Bicycle

        obj.changeGear(4);

        obj.speedUp(5);

        obj.applyBrakes(2);

  

        Console.WriteLine("Bicycle Present State:");

  

        // вызов метода класса Bicycle

        obj.printStates();

    }

}

Выход:

Bicycle Present State:
speed: 3 gear: 4

Объяснение: В приведенном выше примере Vehicle является интерфейсом, а класс Bicycle реализует этот интерфейс. Здесь obj объявлен ссылкой на интерфейс Vehicle в методе Main (). Теперь этот объект используется для обозначения объекта велосипед класса Bicycle.

Рекомендуемые посты:

C # | Как использовать интерфейс ссылки

0.00 (0%) 0 votes