Программирование на языке си ( с ) | C Sharp (Си шарп) с нуля. Сортировки | Массивы | Функции

Различия ( отличия ) ООП в середе NET от ООП в языке С ( си )

Давайте попробуем понять, чем ООП в среде .NET а именно в языке C sharp отличается от ООП С++.

Давайте, наверное, попробуем различия описать по пунктам, а то отличий много и их сложно объединять:

  1. конструктор
  2. В С++ сложно обойтись без конструктора, так как конструктор выполняет функцию присвоения начальных значений переменным в классе. А в языке C sharp можно инициализировать переменные прямо в классе:

    C++

    class probnik1 {
       int chislo;
       probnik1 (int _chislo){
          chislo = _chislo;
       }
    };

    C#

    class probnik1 {
       int chislo = 34;
       probnik1 (int _chislo){
          chislo = _chislo;
       }
    }

    Если можно при объявлении переменных присваивать им значения, это не означает, что нельзя пользоваться конструктором вместе с начальной инициализацией.

    Да, и не забывайте, что в С sharp после написания классе не нужно ставить запятую с точкой.

  3. множественное наследование
  4. Тут много слов не нужно. Скажу просто - в С++ оно есть, а в C sharp не поддерживается.

    C++

    class MyClass : MyClassA, MyClassB{
       //тело;
    };

    C#

    class MyClass : MyClassA, MyClassB{ // ошибка
       //тело;
    }

  5. доступность элементов
  6. В С++ мы могли написать тип доступа и далее перечислить нужные нам поля, которые мы хотели бы видеть именно в таком доступе. А в C sharp требуется для каждого поля указывать тип доступа:

    C++

    class Plex{
    public:
       int x;
       void f ();
    };

    C#

    class Plex{
       public int x;
       private void f ();
    }

  7. абстрактный класс
  8. Для удобного описания общих признаков необходимых нам объектов, в С++ использовалось понятие абстрактного класса. Т.е. класс, объект которого нельзя создать, но который задает в общих чертах с помощью функций свойства этого объекта.

    В C# это понятие отсутствует, т.к. среда .NET имеет новое вспомогательное средство для решения проблем описания свойств объекта - Интерфейсы. Которые выполняют абсолютно такую же роль, что и абстрактные классы. Причем интерфейсов можно унаследовать сколь угодно много.

    C++

    class Figure {
    public:
       virtual double area() = 0;
       virtual void show() = 0;
    };

    C#

    class IntToString : IDisposable{
       public void Dispose()
       {
             throw new NotImplementedException();
       }
    }

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

В принципе, все основным различия я описал и показал в этой статье. Т.е. как видно они достаточно существенны. Но если вы хорошо владеете ООП, то перестроиться в ту или другую сторону не составит большого труда.

Рекомендации к прочтению:

  1. Исключительные ситуации
  2. Коллекции
При копировании ( использовании ) материала размещайте ссылку на сайт www.mir-koda.ru