В чем разница между общим классом и общим методом? [Дубликат]

Для HTML5 html5 lib был оставлен уже много лет. Единственная библиотека HTML5, которую я могу найти с недавними записями обновления и обслуживания, - это html5-php , который чуть больше недели назад был добавлен в бета 1.0.

0
задан loneshark99 11 December 2015 в 20:45
поделиться

2 ответа

Это не одно и то же, но разница очевидна только тогда, когда у вас есть свойства / поля с общим типом (который вы можете делать только тогда, когда сам класс является общим) или у вас есть несколько методов:

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> для методов, когда у вас есть это в классе, поскольку наличие в обоих местах фактически вводит другой общий тип типа для метода, который не зависит от метода для класса ...)

1
ответ дан Aasmund Eldhuset 3 September 2018 в 17:00
поделиться

В классе 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
1
ответ дан Yacoub Massad 3 September 2018 в 17:00
поделиться
Другие вопросы по тегам:

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