Для HTML5 html5 lib был оставлен уже много лет. Единственная библиотека HTML5, которую я могу найти с недавними записями обновления и обслуживания, - это html5-php , который чуть больше недели назад был добавлен в бета 1.0.
Это не одно и то же, но разница очевидна только тогда, когда у вас есть свойства / поля с общим типом (который вы можете делать только тогда, когда сам класс является общим) или у вас есть несколько методов:
public class ArrayWrapper<T> {
private T[] elements;
public T get(int index) {
return elements[index];
}
public void set(int index, T value) {
elements[index] = value;
}
}
Без <T>
в классе поле T[] elements
не будет компилироваться, и можно было бы использовать разные типы в get()
и set()
на одном и том же объекте.
(Как заметил Ли, вы, вероятно, не хотите использовать <T>
для методов, когда у вас есть это в классе, поскольку наличие в обоих местах фактически вводит другой общий тип типа для метода, который не зависит от метода для класса ...)
В классе Test1
значение T
, определенное на уровне класса, отличается от T
, определенного по методу Test1Method
. Это делает T
на уровне класса бесполезным.
Вы можете использовать Test1
следующим образом:
Test1<string> x = new Test1<string>();
x.Test1Method(1);
В этом случае первым T
является string
а второй T
- int.
Как сейчас, Test1
не отличается от Test2
.
Было бы иначе, если вы определили Test1
следующим образом:
public class Test1<T>
{
public void Test1Method(T x)
{
Console.WriteLine(x);
}
}
Обратите внимание на это изменение, так как Test1Method
не имеет общего параметра T
. Теперь этот класс отличается от Test2
тем, что в Test1
вы указываете T
при построении объекта, а в Test2
вы можете иметь разные T
каждый раз, когда вы вызываете Test2Method
.
Вот пример того, как вы можете использовать два класса (после внесенного изменения):
Test1<int> x = new Test1<int>();
x.Test1Method(1); //valid
x.Test1Method(2); //valid
x.Test1Method("str"); //invalid
Test2 x1 = new Test2();
x1.Test2Method(1); //valid
x1.Test2Method("str"); //valid