Re[10]: MC++ & ref/out
От: Lexey Россия  
Дата: 03.04.02 07:32
Оценка:
Здравствуйте 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;
        }
    }
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.