<?xml version="1.0" encoding="utf-8" ?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:tt="http://teletype.in/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"><title>Пётр</title><author><name>Пётр</name></author><id>https://teletype.in/atom/sitroman</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/sitroman?offset=0"></link><link rel="alternate" type="text/html" href="https://teletype.in/@sitroman?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=sitroman"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/sitroman?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-04-30T09:45:21.719Z</updated><entry><id>sitroman:SkEGU6tzE</id><link rel="alternate" type="text/html" href="https://teletype.in/@sitroman/SkEGU6tzE?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=sitroman"></link><title>Leetcode.com, задача №121. &quot;Лучшее время для покупки и продажи акций&quot;</title><published>2019-01-14T08:19:23.687Z</published><updated>2019-01-14T08:19:23.687Z</updated><summary type="html">Дан массив значений стоимости акций. Разрешено сделать одну транзакцию: покупка и продажа. И только в таком порядке. Необходимо вычислить максимальную прибыль, которую можно получить. В противном случае вернуть 0.</summary><content type="html">
  &lt;h2&gt;Условие&lt;/h2&gt;
  &lt;p&gt;Дан массив значений стоимости акций. Разрешено сделать одну транзакцию: покупка и продажа. И только в таком порядке. Необходимо вычислить максимальную прибыль, которую можно получить. В противном случае вернуть 0.&lt;/p&gt;
  &lt;h2&gt;Пример №1&lt;/h2&gt;
  &lt;p&gt;&lt;strong&gt;Входной массив:&lt;/strong&gt; [7, 1, 5, 3, 6, 4]&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Максимальная прибыль:&lt;/strong&gt; 5&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Объяснение:&lt;/strong&gt; покупаем акции на второй день по цене 1, продаём - на пятый по цене 6, получается прибыль 5. Продавать по 7 мы не можем, т.к. сначала нужно купить акции.&lt;/p&gt;
  &lt;h2&gt;Пример №2&lt;/h2&gt;
  &lt;p&gt;&lt;strong&gt;Входной массив:&lt;/strong&gt; [7, 6, 4, 3, 1]&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Максимальная прибыль:&lt;/strong&gt; 0&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;Объяснение:&lt;/strong&gt; мы не можем в последующие дни купить по цене большей, чем продали в любой день.&lt;/p&gt;
  &lt;h2&gt;Вариант №1 решения&lt;/h2&gt;
  &lt;p&gt;Прежде всего, выразим задачу математически. От нас требуется найти &lt;em&gt;max(price[j] - max[i])&lt;/em&gt; при&lt;em&gt; j &amp;gt; i&lt;/em&gt;.&lt;/p&gt;
  &lt;p&gt;Для начала попробуем простой перебор:&lt;/p&gt;
  &lt;pre&gt;public class Solution {
    public int MaxProfit(int[] prices) {
        int delta;
        int maxProfit = 0;            
        for (int i = 0; i &amp;lt; prices.Length; i++)
        {                
            for (int j = i + 1; j &amp;lt; prices.Length; j++)
            {
                delta = prices[j] - prices[i];
                if (delta &amp;gt; 0)
                    maxProfit = Math.Max(maxProfit, delta);
            }
        }
        return maxProfit;
    }
}
&lt;/pre&gt;
  &lt;p&gt;Главный недостаток перебора - время выполнения, которое в данном случае пропорционально &lt;em&gt;n * (n - 1) / 2&lt;/em&gt;, где&lt;em&gt; n&lt;/em&gt; - количество элементов в массиве. Поэтому временная сложность равняется квадрату количества элементов &lt;strong&gt;О(n * n)&lt;/strong&gt;.&lt;/p&gt;
  &lt;h2&gt;Вариант №2&lt;/h2&gt;
  &lt;p&gt;Для решения задачи лучшим способом достаточно одного прохода по массиву. При этом будем отмечать или перезаписывать наименьшее значение и вычислять по отношению к нему разницу со значениями последующих элементов.&lt;/p&gt;
  &lt;pre&gt;public class Solution {
    public int MaxProfit(int[] prices) {
        if (prices.Length &amp;lt; 2)
            return 0;

        int maxProfit = 0;
        int minValue = prices[0];
            
        for (int i = 1; i &amp;lt; prices.Length; i++)
        {
            if (prices[i] &amp;lt; minValue)
            {
                minValue = prices[i];
                continue;
            }
            else
            {
                if (prices[i] - minValue &amp;gt; maxProfit)
                    maxProfit = prices[i] - minValue;
            }
        }
        return maxProfit;
    }
}
&lt;/pre&gt;
  &lt;p&gt;Временная сложность данного решения - &lt;strong&gt;О(n)&lt;/strong&gt;.&lt;/p&gt;
  &lt;p&gt;Так как на сайте можно смотреть лучшие по быстродействию решения, то свой первоначальный код я немного изменил.&lt;/p&gt;
  &lt;p&gt;В самом начале добавлена проверка на нулевой массив и массив с одним элементом:&lt;/p&gt;
  &lt;pre&gt;if (prices.Length &amp;lt; 2)
    return 0;
&lt;/pre&gt;
  &lt;p&gt;После этой проверки инициализируется переменная &lt;em&gt;minValue&lt;/em&gt; нулевым элементом массива. Это позволяет начать цикл &lt;em&gt;for&lt;/em&gt; с первого элемента.&lt;/p&gt;
  &lt;p&gt;В самом цикле после нахождения минимального значения используется ключевое слово continue, немедленно запускающее следующую итерацию.&lt;/p&gt;

</content></entry><entry><id>sitroman:r1K1UTYfE</id><link rel="alternate" type="text/html" href="https://teletype.in/@sitroman/r1K1UTYfE?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=sitroman"></link><title>Установка Microsoft SQL Server Management Studio без интернета</title><published>2019-01-14T08:18:41.010Z</published><updated>2019-01-14T08:18:41.010Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://teletype.in/files/a6/a67248c8-bf21-49e6-b4f9-4758d6a4dc81.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://teletype.in/files/8e/8ec4fee0-7d79-40e7-8e71-fbd93cb4d257.png&quot;&gt;В данный момент изучаю Microsoft SQL Server. Для конфигурирования, управления и администрирования всех компонентов этой СУБД (система управления базами данных) используется утилита Management Studio. И понадобилось её установить в отсутствии интернета. Процесс при определённых знаниях несложный, но я на него потратил пару часов. Поэтому делюсь полученными навыками.</summary><content type="html">
  &lt;p&gt;В данный момент изучаю Microsoft SQL Server. Для конфигурирования, управления и администрирования всех компонентов этой СУБД (система управления базами данных) используется утилита Management Studio. И понадобилось её установить в отсутствии интернета. Процесс при определённых знаниях несложный, но я на него потратил пару часов. Поэтому делюсь полученными навыками.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;1.&lt;/strong&gt;Устанавливаем Microsoft SQL Server из скаченного заранее файла. Я установил старенькую версию 2012. Её функций более чем достаточно для изучения запросов к базу данных. Во всех окнах во смело жмём &amp;quot;Далее&amp;quot;, только при выборе компонентов можно оставить галочки у пунктов &amp;quot;Службы компонента Database Engine&amp;quot;, &amp;quot;Репликация SQL Server&amp;quot; и &amp;quot;Пакет SDK средств связи клиента SQL&amp;quot;.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;2. &lt;/strong&gt;Запускаем установщик Managment Sudio. Выбираем &amp;quot;Новая установка изолированного экземпляра ...&amp;quot;&lt;/p&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/8e/8ec4fee0-7d79-40e7-8e71-fbd93cb4d257.png&quot; width=&quot;800&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;&lt;strong&gt;3.&lt;/strong&gt; Добавляем компоненты в существующий экземпляр, созданные при установке в п.1&lt;/p&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/c4/c4e68334-ae4c-46b2-9994-a87f902d80e0.png&quot; width=&quot;820&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;&lt;strong&gt;4.&lt;/strong&gt; При выборе компонентов ставим галочку &amp;quot;Средства управления - основные&amp;quot;.&lt;/p&gt;
  &lt;figure class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://teletype.in/files/41/416d4af4-09e2-4491-b079-edf976744f98.png&quot; width=&quot;820&quot; /&gt;
  &lt;/figure&gt;
  &lt;p&gt;&lt;strong&gt;5.&lt;/strong&gt; Потом везде жмём &amp;quot;Далее&amp;quot; и готово!&lt;/p&gt;

</content></entry><entry><id>sitroman:HkNaBaKzE</id><link rel="alternate" type="text/html" href="https://teletype.in/@sitroman/HkNaBaKzE?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=sitroman"></link><title>Разбор теста от proglib.io, ч.3</title><published>2019-01-14T08:18:04.468Z</published><updated>2019-01-14T08:18:04.468Z</updated><summary type="html">17. Что является идентификатором метода при перегрузке?</summary><content type="html">
  &lt;p&gt;17. Что является идентификатором метода при перегрузке?&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;имя и параметры&lt;/strong&gt;;&lt;/li&gt;
    &lt;li&gt;модификаторы доступа, возвращаемый тип и параметры;&lt;/li&gt;
    &lt;li&gt;&lt;s&gt;имя, параметры, возвращаемый тип&lt;/s&gt;;&lt;/li&gt;
    &lt;li&gt;параметры и модификаторы доступа.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;18. Что означает ключевое слово &amp;quot;params&amp;quot;?&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;Параметр метода будет принимать переменное число аргументов&lt;/strong&gt;.&lt;/li&gt;
    &lt;li&gt;Инициирует передачу аргументов по ссылке.&lt;/li&gt;
    &lt;li&gt;Ссылается на глобальное пространство имён.&lt;/li&gt;
    &lt;li&gt;Ссылается на переданные аргументы командной строки.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;19. Что из ниже перечисленного не может иметь модификатор &amp;quot;virtual&amp;quot;?&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;методы;&lt;/li&gt;
    &lt;li&gt;свойства;&lt;/li&gt;
    &lt;li&gt;индексаторы;&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;поля&lt;/strong&gt;.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;20. Какой результат выполнения следующей программы?&lt;/p&gt;
  &lt;pre&gt;public class A
{
    private string name = &amp;quot;Name&amp;quot;;

    public void Display()
    {
        Display2(ref name, ref name);
        Console.WriteLine(name);
    }

    public void Display2(ref string x, ref string y)
    {
        Console.WriteLine(name);
        x = &amp;quot;Name 1&amp;quot;;
        Console.WriteLine(name);
        y = &amp;quot;Name 2&amp;quot;;
        Console.WriteLine(name);
        name = &amp;quot;Name 3&amp;quot;;
    }
}
class Program
{
    static void Main(string[] args)
    {
        A overload = new A();
        overload.Display();
        Console.ReadKey();
    }
}
&lt;/pre&gt;
  &lt;ul&gt;
    &lt;li&gt;Произойдёт ошибка компиляции.&lt;/li&gt;
    &lt;li&gt;Name 1 Name 2 Name 3 Name.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Name Name 1 Name 2 Name 3&lt;/strong&gt;.&lt;/li&gt;
    &lt;li&gt;Четвёртый вариант.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;21. Среди перечисленных конструкций укажите определение индексатора.&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;string GetName { } { return &amp;quot;Name&amp;quot;; }&lt;/li&gt;
    &lt;li&gt;string Name [int i]&lt;/li&gt;
    &lt;li&gt;&lt;s&gt;string Name { get { return &amp;quot;Name&amp;quot;; } }&lt;/s&gt;&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;string this [int i] { get { return &amp;quot;Name&amp;quot;; } }&lt;/strong&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;&lt;em&gt;P.S. Ничего не знал про индексаторы. Не угадал.&lt;/em&gt;&lt;/p&gt;
  &lt;p&gt;22. Что выведет на экран программа ниже?&lt;/p&gt;
  &lt;pre&gt;class Program
{
    static void Main(string[] args)
    {
        string s;
        s += &amp;quot;string&amp;quot;;
        Console.WriteLine(s);
    }
}
&lt;/pre&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;em&gt;&lt;s&gt;string&lt;/s&gt;&lt;/em&gt;;&lt;/li&gt;
    &lt;li&gt;&amp;quot;string&amp;quot;;&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;возникнет ошибка компиляции&lt;/strong&gt;;&lt;/li&gt;
    &lt;li&gt;возникнет ошибка времени выполнения.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;&lt;em&gt;P.S. Дааа, строки надо инициализировать.&lt;/em&gt;&lt;/p&gt;
  &lt;p&gt;23. Как правильно определять структуры?&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;s&gt;struct &amp;lt;Имя структуры&amp;gt; () { ... }&lt;/s&gt;&lt;/li&gt;
    &lt;li&gt;struct &amp;lt;Имя структуры&amp;gt; (string[ ] args) { ... }&lt;/li&gt;
    &lt;li&gt;struct { ... }&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;struct &amp;lt;Имя структуры&amp;gt; { ... }&lt;/strong&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;24. Какой из перечисленных типов не является значимым?&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;float;&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;class&lt;/strong&gt;;&lt;/li&gt;
    &lt;li&gt;struct;&lt;/li&gt;
    &lt;li&gt;int.&lt;/li&gt;
  &lt;/ul&gt;

</content></entry><entry><id>sitroman:ByndrpKMN</id><link rel="alternate" type="text/html" href="https://teletype.in/@sitroman/ByndrpKMN?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=sitroman"></link><title>Разбор теста от proglib.io, ч.2</title><published>2019-01-14T08:16:52.066Z</published><updated>2019-01-14T08:16:52.066Z</updated><summary type="html">9. Какой будет результат выполнения следующего кода?</summary><content type="html">
  &lt;p&gt;9. Какой будет результат выполнения следующего кода?&lt;/p&gt;
  &lt;pre&gt;public sealed class Car
{
  public readonly int maxSpeed = 0;
  private int currSpeed;
  public Car()
  {
    maxSpeed = 220;
  }
  public Car(int max)
  {
    maxSpeed = max;
  }
  public int Speed
  {
    get { return currSpeed; }
    set
    {
      currSpeed = value;
      if (currSpeed &amp;gt; maxSpeed)
      {
        currSpeed = maxSpeed;
      }
    }
  }
}

public class B : Car
{
  public void Display()
  {
    Console.WriteLine(Speed);
  }
}

class Program
{
  static void Main(string[] args)
  {
    B b = new B();
    b.Speed = 300;
    b.Display();
  }
}
&lt;/pre&gt;
  &lt;ul&gt;
    &lt;li&gt;0;&lt;/li&gt;
    &lt;li&gt;&lt;s&gt;220&lt;/s&gt;;&lt;/li&gt;
    &lt;li&gt;300;&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;ошибка на этапе компиляции.&lt;/strong&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;&lt;em&gt;P.S. Не заметил, что class Car запечатанный, а значит class B не может от него наследовать.&lt;/em&gt;&lt;/p&gt;
  &lt;p&gt;10.Можно ли наследовать конструктор и деструктор базового класса?&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;s&gt;да;&lt;/s&gt;&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;нет&lt;/strong&gt;;&lt;/li&gt;
    &lt;li&gt;иногда.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;&lt;em&gt;P.S. Конструктор базового класса не наследуется, но можно использовать или расширять его через специально слово &lt;/em&gt;&lt;strong&gt;base&lt;/strong&gt;&lt;em&gt;.&lt;/em&gt;&lt;/p&gt;
  &lt;p&gt;11. В результате компиляции программы ниже возникнет ошибка, связанная с вызовом метода SomeMethod. Как его правильно вызвать, чтобы программа скомпилировалась?&lt;/p&gt;
  &lt;pre&gt;interface IA
{
  void SomeMethod();
}
  
class A : IA
{
  void IA.SomeMethod()
  {
    Console.WriteLine(&amp;quot;Hello&amp;quot;);
  }
}
        
class Program
{
  static void Main(string[] args)
  {
    A a = new A();
    a.SomeMethod();
  }        
}
&lt;/pre&gt;
  &lt;ul&gt;
    &lt;li&gt;Никак. Ошибки не возникнет.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Использовать оператор as ((a as IA).SomeMethod()).&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;Использовать оператор is ((a is IA).SomeMethod()).&lt;/li&gt;
    &lt;li&gt;&lt;s&gt;Использовать полное название метода a.IA.SomeMethod()&lt;/s&gt;.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;12. Что выведет программа ниже?&lt;/p&gt;
  &lt;pre&gt;public class A
{
    public A()
    {
        Console.Write(&amp;quot;A created; &amp;quot;);
    }
}

public class B : A
{
    private B()
    {
        Console.Write(&amp;quot;B created; &amp;quot;);
    }

    public B(string str)
    {
        Console.Write(&amp;quot;B created with string: {0}; &amp;quot;, str);
    }
}

public class C : B
{
    public C()
    {
        Console.Write(&amp;quot;C created; &amp;quot;);
    }
}

class Program
{
    static void Main(string[] args)
    {
        A ab = new B(&amp;quot;parameter&amp;quot;);
        A ac = new C();

        Console.ReadKey();
    }        
}
&lt;/pre&gt;
  &lt;ul&gt;
    &lt;li&gt;A created; B created with string: parameter; A created; B created; C created;&lt;/li&gt;
    &lt;li&gt;&lt;s&gt;Еще два варианта&lt;/s&gt;.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Программа не скомпилируется&lt;/strong&gt;.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;&lt;em&gt;P.S. Будет ошибка на этапе компиляции, так как класс С не может наследовать от класса B с конструктором по умолчанию с доступом private.&lt;/em&gt;&lt;/p&gt;
  &lt;p&gt;13. Существует ли возможность отказаться от реализации абстрактного класса в классе наследнике?&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;Нет, невозможно отказаться от реализации абстрактного класса.&lt;/li&gt;
    &lt;li&gt;Да, если пометить класс-наследник атрибутом [NonAbstract].&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Да, если пометить класс-наследник как абстрактный&lt;/strong&gt;.&lt;/li&gt;
    &lt;li&gt;&lt;s&gt;Да, достаточно не реализовывать ненужные методы и свойства&lt;/s&gt;.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;14. Что неверно в определении следующих интерфейсов?&lt;/p&gt;
  &lt;pre&gt;public abstract interface IAction
{
    void Move();
}

internal interface IRunAction : IAction
{
    void Run();
}
&lt;/pre&gt;
  &lt;ul&gt;
    &lt;li&gt;Интерфейсы не могут иметь модификатор доступа internal.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Интерфейсы не могут иметь модификатор abstract&lt;/strong&gt;.&lt;/li&gt;
    &lt;li&gt;Интерфейс IRunAction должен определить метод Move, так как базовый интерфейс IAction является абстрактным.&lt;/li&gt;
    &lt;li&gt;От абстрактного интерфейса нельзя наследоваться.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;&lt;em&gt;P.S. Смекнул, что абстрактный интерфейс - это перебор&lt;/em&gt;.&lt;/p&gt;
  &lt;p&gt;15. Какая из строк вызовет ошибку компиляции?&lt;/p&gt;
  &lt;pre&gt;interface IList
{
    int Count { get; set; }
}

interface ICounter
{
    void Count(int i);
}

interface IListCounter : IList, ICounter { }

class C
{
    void Test(IListCounter x)   // 1
    {
        x.Count(1);             // 2
        x.Count = 1;            // 3
    }
}

public class Program
{
    private static void Main(string[] args)
    {

    }
}
&lt;/pre&gt;
  &lt;ul&gt;
    &lt;li&gt;1;&lt;/li&gt;
    &lt;li&gt;2;&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;3&lt;/strong&gt;;&lt;/li&gt;
    &lt;li&gt;&lt;s&gt;никакая, программа рабочая&lt;/s&gt;.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;&lt;em&gt;P.S. В данном случае название метода в приоритете, поэтому будет ошибка в строчке с одноимённым свойством.&lt;/em&gt;&lt;/p&gt;
  &lt;p&gt;16. Какое утверждение об абстрактных методах неверно?&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;Абстрактный метод неявно представляет собой виртуальный метод.&lt;/li&gt;
    &lt;li&gt;Объявления абстрактных методов допускаются только в виртуальных классах.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;В объявлении абстрактного метода можно использовать статические или виртуальные модификаторы.&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;Чтобы реализовать абстрактный метод в классе-наследнике, необходимо использовать ключевое слово override.&lt;/li&gt;
  &lt;/ul&gt;

</content></entry><entry><id>sitroman:H1SSrptfV</id><link rel="alternate" type="text/html" href="https://teletype.in/@sitroman/H1SSrptfV?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=sitroman"></link><title>Разбор теста от proglib.io, ч.1</title><published>2019-01-14T08:15:57.290Z</published><updated>2019-01-14T08:15:57.290Z</updated><summary type="html">Зачёркнутым шрифтом выделены мои неправильные ответы, жирным - верные ответы на вопросы.</summary><content type="html">
  &lt;p&gt;&lt;s&gt;Зачёркнутым&lt;/s&gt; шрифтом выделены мои неправильные ответы, &lt;strong&gt;жирным&lt;/strong&gt; - верные ответы на вопросы.&lt;/p&gt;
  &lt;ol&gt;
    &lt;li&gt;ООП поддерживает два вида связывания объектов с кодом методов. Соответствующие методы называются:&lt;/li&gt;
  &lt;/ol&gt;
  &lt;ul&gt;
    &lt;li&gt;виртуальными и абстрактными;&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;статическими и виртуальными&lt;/strong&gt;;&lt;/li&gt;
    &lt;li&gt;&lt;s&gt;абстрактными и статическими&lt;/s&gt;;&lt;/li&gt;
    &lt;li&gt;публичными и приватными.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;&lt;em&gt;P.S. Соответствующие виды связывания: раннее и позднее. Понятия не имел о правильном ответе. Даже после выяснения верного варианта...&lt;/em&gt;&lt;/p&gt;
  &lt;p&gt;2. Какая разница между идентичностью и равенством объектов?&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;Идентичность означает, что у объектов есть общий неабстрактный предок, а равенство - любой общий предок.&lt;/li&gt;
    &lt;li&gt;Идентичность означает, что у объектов одинаковые поля, а равенство - что они содержат одинаковые данные.&lt;/li&gt;
    &lt;li&gt;Идентичность означает, что объекты являются экземпляром одного и того же класса, а равенство - что они содержат одинаковые данные.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Идентичность означает, что две ссылки указывают на один и тот же объект, а равенство - что они содержат одинаковые данные.&lt;/strong&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;3. Какое утверждение верно?&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;От структуры так же, как и от класса, можно наследоваться.&lt;/li&gt;
    &lt;li&gt;Если структура или объект класса присваивается новому объекту, то в новую переменную сохраняется копия всех данных.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Структура является размерным типом, а класс - ссылочный.&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;В структуре нельзя определять конструктор.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;4. В чём разница между перегрузкой (overloading) и переопределением (overriding)?&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;Её не существует. Оба понятия описывают одно и то же явление.&lt;/li&gt;
    &lt;li&gt;Перегрузка означает наличие двух методов с теми же аргументами, но с различными реализациями. Один из них будет существовать в родительском классе, а другой - в производном или дочернем классе.&lt;/li&gt;
    &lt;li&gt;Переопределение означает наличие двух или более методов в одном классе с тем же именем, но с разными аргументами.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Ни один из предложенных вариантов не является верным.&lt;/strong&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;&lt;em&gt;P.S. Пункты 2 и 3 являются определениями для переопределения и перегрузки соответственно.&lt;/em&gt;&lt;/p&gt;
  &lt;p&gt;5. Скомпилируется ли программа ниже?&lt;/p&gt;
  &lt;pre&gt;public class A
{
  public string Str { get; protected internal set; } = &amp;quot;Hello&amp;quot;;
}
class Program
{
  static void Main(string[] args) 
  {
  A a = new A();
  a.Str += &amp;quot; World&amp;quot;;
  Console.WriteLine(a.Str);
  }
}
&lt;/pre&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;да;&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;&lt;s&gt;ещё три варианта.&lt;/s&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;&lt;em&gt;P.S. Что-то меня смутил модификатор доступа сеттера свойства Str, и я ответил неверно. Хотя классы и члены классов с модификатором доступа&lt;/em&gt;&lt;strong&gt;protected internal &lt;/strong&gt;&lt;em&gt;доступны из текущей сборки (и из производных классов).&lt;/em&gt;&lt;/p&gt;
  &lt;p&gt;6. Какое из утверждений верно?&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;strong&gt;У интерфейсов можно объявлять свойства, но без тела у методов доступа свойства&lt;/strong&gt;.&lt;/li&gt;
    &lt;li&gt;У интерфейсов нельзя объявлять свойства.&lt;/li&gt;
    &lt;li&gt;У интерфейсов можно объявлять свойства с помощью ключевого слова &amp;quot;property&amp;quot;.&lt;/li&gt;
    &lt;li&gt;&lt;s&gt;У интерфейсов можно объявлять свойства так же, как и у классов.&lt;/s&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;7. Что выведет код?&lt;/p&gt;
  &lt;pre&gt;public class A 
{
  private string str = &amp;quot;Hello&amp;quot;;
  public string Str
  {
    set
    {
      str = value;
    }
  }
}
class Program
{
  static void Main(string[] args) 
  {
  A a = new A();
  a.Str = &amp;quot; World&amp;quot;;
  Console.WriteLine(a.Str);
  }
}
&lt;/pre&gt;
  &lt;ul&gt;
    &lt;li&gt;Hello;&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;ошибка на этапе компиляции;&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;&lt;s&gt;что-то ещё.&lt;/s&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p&gt;&lt;em&gt;P.S. Программа не скомпилируется, т.к. у свойства отсутствует метод для чтения, который необходим при выводе значения свойства в консоль.&lt;/em&gt;&lt;/p&gt;
  &lt;p&gt;8. Какое утверждение неверно?&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;Свойства позволяют управлять доступом к переменной.&lt;/li&gt;
    &lt;li&gt;В свойства мы можем вложить дополнительную логику.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;В каждом свойстве должны быть get и set блоки.&lt;/strong&gt;&lt;/li&gt;
    &lt;li&gt;Благодаря свойствам, реализуется один из принципов ООП - инкапсуляция.&lt;/li&gt;
  &lt;/ul&gt;

</content></entry></feed>