Что “T” означает в C#?

Неустранимая ошибка: использование $ this, если не в контексте объекта

$this - специальная переменная в PHP , которая не может быть назначена. Если он доступен в контексте, где он не существует, эта фатальная ошибка указывается.

Эта ошибка может возникнуть:

  1. Если нестатический метод называется статическим , Пример:
    class Foo {
       protected $var;
       public function __construct($var) {
           $this->var = $var;
       }
    
       public static function bar () {
           // ^^^^^^
           echo $this->var;
           //   ^^^^^
       }
    }
    
    Foo::bar();
    
    Как исправить: снова просмотрите свой код, $this может использоваться только в контексте объекта и никогда не должен использоваться в статическом методе. Кроме того, статический метод не должен обращаться к нестатистическому свойству. Используйте self::$static_property для доступа к статическому свойству.
  2. Если код из метода класса был скопирован в нормальную функцию или только глобальную область и , сохраняя специальную функцию $this переменная. Как исправить: Просмотрите код и замените $this на другую переменную замещения.

Вопросы, относящиеся:

  1. Вызов нестатический метод как статический: PHP Неустранимая ошибка: использование $ this, если не в объектном контексте
  2. Копировать код: Неустранимая ошибка: использование $ this, если не в объекте context
  3. Все «Использование $ this, если не в контексте объекта» Вопросы по Stackoverflow

74
задан George Stocker 20 February 2015 в 14:15
поделиться

7 ответов

Это - символ для универсальный параметр типа . Это могло точно также быть что-то еще, например:

public class SomeBase<GenericThingy> where GenericThingy : SomeBase<GenericThingy>, new()

Только T является значением по умолчанию один используемый и поощренный Microsoft.

50
ответ дан user39603 24 November 2019 в 12:01
поделиться

T не является серовато-синим ключевым словом, а заполнитель для универсального типа. Посмотрите Microsoft Введение в Дженерики

, эквивалентный синтаксис VB.Net был бы:

Public Class SomeBase(Of T As {Class, New}))
45
ответ дан Joel Coehoorn 24 November 2019 в 12:01
поделиться

Хороший пример другого имени использовал вместо T would быть классами хэш-таблицы, например,

public class Dictionary<K,V> ...

, Где K обозначает Ключ и V для значения. Я думаю T, обозначает тип.

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

15
ответ дан biozinc 24 November 2019 в 12:01
поделиться

Лучший способ состоял бы в том, чтобы вовлечь себя знакомый с "Дженериками", многими ресурсами в сети, вот один

, T не является ключевым словом, а именем, могло быть что-либо действительно, насколько я знаю, но T является соглашением (когда только один тип необходим курса)

4
ответ дан Yossi Dahan 24 November 2019 в 12:01
поделиться

Это было бы "Дженериком". Как люди уже упомянули, существует объяснение Microsoft из понятия. Что касается того, почему "T" - видят этот вопрос .

, Короче говоря это позволяет Вам создавать класс/метод, который специализирован к определенному типу. Классический пример System.Collections.Generic.List<T> класс. Это совпадает с System.Collections.ArrayList, за исключением того, что это позволяет Вам хранить только объект типа T. Это обеспечивает безопасность типов - Вы не можете (случайно или иначе) помещенные объекты неправильного типа в Вашем списке. System.Collections.Generic пространство имен содержит несколько других различных типов набора, которые используют это.

Что касается того, где Вы могли использовать его - Вам решать Существует много примеров использования, которые время от времени подходят. Главным образом это - некоторый самодельный набор (когда встроенные не достаточны), но это могло действительно быть что-либо.

5
ответ дан Community 24 November 2019 в 12:01
поделиться

Эти T название параметра типа в универсальном классе. Это обозначает "Тип", но Вы могли точно также назвать его "Alice".

Вы используете дженерики для увеличения возможности многократного использования безопасным с точки зрения типов способом, напрасно не копируя код. Таким образом Вы не должны писать классы для ListOfIntegers, ListOfStrings, ListOfChars, ListOfPersons и так далее, но можете вместо этого записать универсальный класс List<T> и затем инстанцировать объектов типов List<Int32>, List<string>, List<char> и List<Person>. Компилятор делает работу для Вас.

2
ответ дан jason 24 November 2019 в 12:01
поделиться

Это означает "любой класс". Это мог быть "B", "A", безотносительно. Я думаю, что T используется из-за "Шаблона"

1
ответ дан Otávio Décio 24 November 2019 в 12:01
поделиться
Другие вопросы по тегам:

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