Я думаю, что я не понимаю, что должно указывать свойство Type.IsByRef
из .NET. Я думал, что он должен возвращать true для ссылочных типов и false для типов значений, поэтому противоположность Type.IsValueType
. Я не могу заставить его возвращать true для типов, которые, очевидно, являются ссылочными типами. Вот пример:Тип.IsByRef всегда возвращает false
using System.Text;
public class Program
{
static void Main(string[] args)
{
try
{
int i = 0;
Console.WriteLine(i.GetType().IsByRef); // returns false - OK
Exception e = new Exception();
Console.WriteLine(e.GetType().IsByRef); // returns false - ??
StringBuilder sb = new StringBuilder();
Console.WriteLine(sb.GetType().IsByRef); // returns false - ??
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
Console.ReadKey(true);
}
}
Что мне здесь не хватает?
Спасибо! Это действительно работает, как вы объяснили. Я предполагаю, что пример в статье MSDN вводит в заблуждение. Ссылка: http://msdn.microsoft.com/en-us/library/system.type.isbyref%28v=vs.80%29.aspx –
@S_F хорошо, это сложно ... не совсем; это правильно, но не очень четко сформулировано; есть разница между * типом, являющимся ссылочным типом *, а сам тип * является ссылкой *. В статье MSDN речь идет о последнем - вы говорите о первом. Обратите внимание, что вы можете иметь оба одновременно: ссылку на ссылочный тип (например, 'ref string') –