Различие между “строгими частными” и “защищенными” Модификаторами Доступа в Delphi?

Я вполне уверен, не возможно сделать то, что Вы пытаетесь сделать. Большинство *отклоняет приложения, которые запрашивают пароль, считанный из TTY непосредственно, не stdin, таким образом, Вы не можете передать пароль по каналу в. Как другие упомянули, можно настроить SSH для не запроса пароль, как объяснено здесь .

После того, как я был downvoted без видимой причины, я пошел и действительно немного больше исследовал на эти expect команда и обнаружил, что это имеет send_tty команда, которая отправляет к/dev/tty вместо stdin, который мог бы на самом деле сделать то, что Вы хотите... Я ранее не знал об этой функции. Я все еще рекомендую поместить ключ на сервере, как бы то ни было.

19
задан gturri 2 February 2014 в 09:38
поделиться

3 ответа

Разница между частным, защищенным и общедоступным довольно очевидна:

  • Закрытые члены / методы видны только в том классе, который их объявляет.
  • Защищенные члены / методы видны внутри class, и для всех подклассов.
  • Открытые члены и методы видны всем другим классам.

В Delphi есть «ошибка», из-за которой видимость всех участников внутри одного модуля становится общедоступной. Ключевое слово strict исправляет это поведение, так что private фактически является частным даже в пределах одного модуля. Для хорошей инкапсуляции я бы рекомендовал всегда использовать ключевое слово strict.

Пример кода:

type
  TFather = class
  private
    FPriv : integer;
  strict private
    FStrPriv : integer;
  protected
    FProt : integer;
  strict protected
    FStrProt : integer;
  public
    FPublic : integer;
  end;

  TSon = class(TFather)
  public
    procedure DoStuff;
  end;

  TUnrelated = class
  public
    procedure DoStuff;
  end;

procedure TSon.DoStuff;
begin
  FProt := 10;       // Legal, as it should be. Accessible to descendants.
  FPriv := 100;      // Legal, even though private. This won't work from another unit!
  FStrictPriv := 10; // <- Compiler Error, FStrictPrivFather is private to TFather
  FPublic := 100;    // Legal, naturally. Public members are accessible from everywhere.
end;

procedure TUnrelated.DoStuff;
var
  F : TFather;
begin
  F := TFather.Create;
  try
    F.FProt := 10;     // Legal, but it shouldn't be!
    F.FStrProt := 100; // <- Compiler error, the strict keyword has "made the protection work"
    F.FPublic := 100;  // Legal, naturally.
  finally
    F.Free;
  end;
end;
32
ответ дан 30 November 2019 в 02:45
поделиться

strict private - видимый и доступный только изнутри этого класса.

private - видимый и доступный только изнутри этого класса И этой единицы класса.

protected - то же, что и private PLUS из дочерних классов

Вы можете узнать больше об инкапсуляции и об ее идее здесь: http://en.wikipedia.org/wiki/Encapsulation_%28computer_science%29#Encapsulation

6
ответ дан 30 November 2019 в 02:45
поделиться

Вы могли бы искали это повсюду (ключевое слово будет "модификаторы доступа")

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

5
ответ дан 30 November 2019 в 02:45
поделиться
Другие вопросы по тегам:

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