Как я наследую переменную интерфейса? [закрыто]

В настоящее время я изучаю несколько операций наследования. Что я узнал, так это то, что мы не можем наследовать несколько классов, но мы можем наследовать класс и интерфейс, поэтому мне просто нужно переключить класс на интерфейс. Как ниже

class a{}
class b{}
interface d{}
//class c:a,b{} That does not work
//class c:a,d{} or class c:b,d{} but these need to work

Если я вернусь к моему вопросу относительно множественной операции наследования, Вот полная программа, которая объясняет мою проблему.

using System;
using System.Collections.Generic;
using System.Text;

namespace interface_ile_multiple_inheritance
{
  interface set_get
  {
    double _getx
    { get; }

    double _gety
    { get ; }

    protected double total;//I want to use it by inheriting
  }

  class set_items
  {
    protected double x;
    protected double y;
    public set_items(double _x, double _y)
    {
        x = _x;
        y = _y:
     }
  }

  class display : set_items, set_get
  {
    public display(double x, double y) : base(x, y) { }

    public  double _getx
    { get { return x; } }

    public double _gety
    { get { return y; } }

    public double total_res()
    {
        total = x + y;    // Error line 1 total does not exist
        return total;     //Error line 2 total does not exist
    }
  }

  class Program
  {
    static void Main(string[] args)
    {
        display disp1 = new display(12, 12);

        Console.WriteLine("Total:" + disp1.total_res().ToString());//HERE İ NEED TO FİND x+y
        Console.WriteLine("Area:" + (disp1._getx * disp1._gety).ToString());//HERE İ NEED TO FİND x*y
    }
  }
}

Даже если я могу наследовать сигнатуры свойств интерфейса, почему я не могу наследовать его целочисленную переменную?

c#
3 голоса | спросил Edvestemhem 16 42017vEurope/Moscow11bEurope/MoscowThu, 16 Nov 2017 07:44:13 +0300 2017, 07:44:13

2 ответа


2

У меня нет опыта C #, но я думаю, что это общая проблема ООП. Я рассматриваю этот вопрос с точки зрения Java.

Первая терминология:

интерфейсы реализовать , что . Когда вы используете интерфейс, вы говорите о его реализации.

классы реализовать как , это нужно сделать. Когда вы используете класс для наследования, вы говорите о его наследовании.

Вот почему вы можете добавлять значения и писать соответствующие методы в классах для наследования, но не в интерфейсах.


Однако это не означает, что вы не можете определять переменные в интерфейсе. Вы можете, но есть две проблемы с тем, что вы пытаетесь:

1.) Сильный>

Определенные переменные будут похожи на константы, которые могут сделать вашу переменную бесполезной.

В Java вы можете называть их статически. Interface.variable

2.) Сильный>

Вторая проблема в вашем случае должна быть защищенным статусом вашей переменной total.

Защищенный в значительной степени является частной переменной с исключением для классов, которые наследуют ее. Но помните, что интерфейсы не наследуются, поэтому переменная довольно конфиденциальна.

Какая польза для этой переменной была бы частной?


Мое предложение:

Подумайте, действительно ли total является частью интерфейса или если он не подходит лучше в точную реализацию или унаследованный класс .

ответил AK_is_curious 16 42017vEurope/Moscow11bEurope/MoscowThu, 16 Nov 2017 10:12:37 +0300 2017, 10:12:37
1

Предположим, у вас есть телевизор. На лицевой стороне имеются переключатели «вкл. /выкл.», «канал вверх» и «канал вниз», кнопки «вверх» и «уменьшение громкости» и некоторые другие кнопки. Эти кнопки предназначены для пользователя для обработки телевизора.

Внутри телевизора имеется множество других кнопок для установки сложных настроек телевизора. Эти настройки и кнопки для управления этими настройками не должны касаться пользователя, для телевизионного техника, чтобы убедиться, что телевизор работает как следует .

Это различие между кнопками для кнопок пользователя и для техников является основным различием между private и public методы /переменные.

Единственная причина, по которой у нас есть телевизор, - это использование пользователем пользователя, и единственный способ использовать его - через кнопки на передней панели. Точно так же - единственная причина, по которой мы имеем класс, - это использование другими классами, и единственный способ, которым могут пользоваться другие классы, - это доступные им методы и переменные, code> ---- +: = 2 =: + ---- .

Единственная причина, по которой у нас есть кнопки для техников внутри телевизора, - помочь кнопкам на передней панели работать правильно. Точно так же - единственная причина, по которой мы имеем public методы и переменные, чтобы помочь private работают правильно .

У нас есть имя для методов public и переменных класса. Мы называем это «API». В телевизионной аналогии API представляет собой набор настроек и кнопок, доступных пользователю. API - это все компоненты класса, доступные для других классов.

Теперь предположим, что на вашем смартфоне есть приложение, которое включает и выключает все электрические устройства в вашем доме. Приложение может включать и выключать только устройства с переключателем «Вкл. /Выкл.». Такие устройства, как микроволновая печь, не могут быть включены и отключены от приложения, потому что их необходимо отключить вручную от источника питания. Поэтому приложение должно убедиться, что у устройств есть переключатель «Вкл. /Выкл.». Другими словами, мы должны убедиться, что все устройства, которые мы хотим включить или выключить, имеют API для него.

Вот что такое интерфейс.

Интерфейс - это способ убедиться, что несколько классов имеют общий API.

Итак, давайте напишем фактический интерфейс C #:

public

Мы могли бы иметь три класса: interface IHaveOnOffSwitch { void TurnOn(); void TurnOff(); } , TV и Radio. Microwave и TV имеют «Вкл /Off ", поэтому они реализуют интерфейс:

Radio

И теперь методы приложения смартфона можно написать следующим образом:

class TV : IHaveOnOffSwitch
{
    private TvType type; // a random private variable

    void TurnOn()
    {
        // logic for turnning on
    }
    void TurnOff()
    {
        // logic for turning off
    }
}
class Radio : IHaveOnOffSwitch
{
    private RadioType type; // a random private variable 

    void TurnOn()
    {
        // logic for turnning on
    }
    void TurnOff()
    {
        // logic for turning off
    }
}

class Microwave
{

}

Причина, по которой приложение использует интерфейс, заключается в том, чтобы знать, что у устройств есть этот API, им все равно, какие частные переменные устройства (например, тип телевизора или тип радио).

Вот почему интерфейс не может иметь частные методы и переменные. Это все о том, что класс позволяет другим классам делать с этим, а не о том, как класс справляется с этим внутри.

ответил Sipo 16 42017vEurope/Moscow11bEurope/MoscowThu, 16 Nov 2017 11:22:33 +0300 2017, 11:22:33

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132