И там и там можно не задавать, нужно понимать что вы хотите сделать.
using System;
public class Test<T>
{
// Перед вызовом конструктора выставится в default(int), то есть 0
private int i;
// Для ссылочного типа default(object) будет null
private object obj;
// default(T)
private T t;
public Test()
{
// Не инициализированная переменная
int foo;
// error CS0165: Use of unassigned local variable 'foo'
Console.WriteLine(foo.ToString());
foo = 0;
// У foo появилось значение, теперь переменной можно пользоваться
Console.WriteLine(foo.ToString());
int bar;
// error CS0165: Use of unassigned local variable 'bar'
Ref(ref bar);
// Для ref нужна инициализированная переменная
Ref(ref foo);
// Для out не нужна
Out(out foo);
Out(out bar);
}
private void Ref(ref int r)
{
r = 0;
}
private void Out(out int o)
{
o = 0;
}
}
Подробнее читайте в MSDN
здесь и
здесь.