Здравствуйте Lexey, Вы писали:
L>Здравствуйте Андрей, Вы писали:
А>>Если ты посмотришь вопрос, который был задан, то увидишь, что речь шла о MC++. А как это в C# будет выглядеть — это уже дело десятое.
А>>Да, в C# можно писать [Out] out и просто out — смысл один и тот же будет, только при чем здесь вопрос топика?
L>Да в том-то вся и фишка, что в документации прямо утверждается, что [Out] и out в C# — это разные вещи. И про OutAttribute явно написано, что относится он только к InterOp'у.
Я думаю, эту дискуссию можно закрыть:
[Out] и out — 100% разные вещи:
1) out не требует привязки System.Runtime.InteropServices, а [Out] требует.
2) out требует обязательной инициализации параметра внутри функции, а [Out] — нет.
3) Если посмотреть в MSIL, то out и [Out] out порождают одинаковый прототип функции ([out] string &), а просто [Out] — другой ([out] string ), т.е. out подразумевает [Out], но не наоборот.
[Out] String ** или [Out] String * & действительно должны давать требуемый эффект out в C#.
Все это можно отлично увидеть на простом примере:
using System;
using System.Runtime.InteropServices;
namespace ClassLibrary1
{
/// <summary>
/// Summary description for Class1.
/// </summary>
public class Class1
{
public Class1()
{
//
// TODO: Add constructor logic here
//
}
public void Test1(out string s)
{
s=null;
}
public void Test2([Out] string s)
{
//вот тут инициализация нафиг не нужна.
}
public void Test3([Out] out string s)
{
s=null;
}
}
}