OutAttribute Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Указывает, что данные необходимо маршалировать из вызываемого объекта обратно в вызывающий объект.
public ref class OutAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Parameter, Inherited=false)]
public sealed class OutAttribute : Attribute
[System.AttributeUsage(System.AttributeTargets.Parameter, Inherited=false)]
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class OutAttribute : Attribute
[<System.AttributeUsage(System.AttributeTargets.Parameter, Inherited=false)>]
type OutAttribute = class
inherit Attribute
[<System.AttributeUsage(System.AttributeTargets.Parameter, Inherited=false)>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type OutAttribute = class
inherit Attribute
Public NotInheritable Class OutAttribute
Inherits Attribute
- Наследование
- Атрибуты
Примеры
В следующем примере показано, как применить InAttribute и OutAttribute к прототипу вызова платформы, который передает массив в качестве параметра. Сочетание атрибутов направления позволяет вызывающей стороне видеть изменения, внесенные вызываемым.
using namespace System;
using namespace System::Runtime::InteropServices;
// Declare a class member for each structure element.
[StructLayout(LayoutKind::Sequential, CharSet = CharSet::Unicode)]
public ref class OpenFileName
{
public:
int structSize;
String^ filter;
String^ file;
// ...
};
private ref class NativeMethods
{
public:
// Declare a managed prototype for the unmanaged function.
[DllImport("Comdlg32.dll", CharSet = CharSet::Unicode)]
static bool GetOpenFileName([In, Out]OpenFileName^ ofn);
};
void main() {}
using System.Runtime.InteropServices;
using System;
// Declare a class member for each structure element.
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public class OpenFileName
{
public int structSize = 0;
public string filter = null;
public string file = null;
// ...
}
internal static class NativeMethods
{
// Declare a managed prototype for the unmanaged function.
[DllImport("Comdlg32.dll", CharSet = CharSet.Unicode)]
internal static extern bool GetOpenFileName([In, Out] OpenFileName ofn);
}
public class MainMethod
{
static void Main()
{ }
}
Imports System.Runtime.InteropServices
' Declare a class member for each structure element.
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Class OpenFileName
Public structSize As Integer = 0
Public filter As String = Nothing
Public file As String = Nothing
' ...
End Class
Friend Class NativeMethods
' Declare managed prototype for the unmanaged function.
Friend Declare Unicode Function GetOpenFileName Lib "Comdlg32.dll" (
<[In](), Out()> ByVal ofn As OpenFileName) As Boolean
End Class
Public Class App
Public Shared Sub Main()
End Sub
End Class
Комментарии
Этот атрибут можно применить к параметрам.
Является OutAttribute необязательным. Атрибут поддерживается только для COM-взаимодействия и вызова платформы. При отсутствии явных параметров маршалер взаимодействия принимает правила, основанные на типе параметра, передается ли параметр по ссылке или по значению, а также является ли тип непреобразуемым или непреобразуемым. Например, StringBuilder класс всегда предполагается как in/out, а массив строк, передаваемых по значению, считается in.
Поведение только на выходе никогда не является поведением маршалинга по умолчанию для параметров. Можно применить OutAttribute к значениям и ссылочным типам, передаваемым по ссылке, чтобы изменить поведение ввода и выхода на поведение только для выхода, что эквивалентно использованию out
ключевое слово в C#. Например, массивы, передаваемые по значению, которые по умолчанию маршалируются как параметры только для входа, можно изменить на Только для выхода. Однако поведение не всегда обеспечивает ожидаемую семантику, если типы включают всепреобразуемые элементы или поля, так как маршалер взаимодействия использует закрепление. Если вы не заботитесь о передаче данных в вызываемый объект, маршалинг только для выхода может обеспечить лучшую производительность для неперемечаемых типов.
InAttribute Объединение и OutAttribute особенно полезно при применении к массивам и отформатированным непреобразуемым типам. Вызывающие абоненты видят изменения, внесенные вызываемой в эти типы, только при применении обоих атрибутов. Так как эти типы требуют копирования во время маршалинга, можно использовать InAttribute и OutAttribute для сокращения количества ненужных копий.
Дополнительные сведения о влиянии OutAttribute на поведение маршалинга см. в разделе Атрибуты направления.
Конструкторы
OutAttribute() |
Инициализирует новый экземпляр класса OutAttribute. |
Свойства
TypeId |
В случае реализации в производном классе возвращает уникальный идентификатор для этого атрибута Attribute. (Унаследовано от Attribute) |
Методы
Equals(Object) |
Возвращает значение, показывающее, равен ли экземпляр указанному объекту. (Унаследовано от Attribute) |
GetHashCode() |
Возвращает хэш-код данного экземпляра. (Унаследовано от Attribute) |
GetType() |
Возвращает объект Type для текущего экземпляра. (Унаследовано от Object) |
IsDefaultAttribute() |
При переопределении в производном классе указывает, является ли значение этого экземпляра значением по умолчанию для производного класса. (Унаследовано от Attribute) |
Match(Object) |
При переопределении в производном классе возвращает значение, указывающее, является ли этот экземпляр равным заданному объекту. (Унаследовано от Attribute) |
MemberwiseClone() |
Создает неполную копию текущего объекта Object. (Унаследовано от Object) |
ToString() |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |
Явные реализации интерфейса
_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) |
Сопоставляет набор имен соответствующему набору идентификаторов диспетчеризации. (Унаследовано от Attribute) |
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) |
Возвращает сведения о типе объекта, которые можно использовать для получения сведений о типе интерфейса. (Унаследовано от Attribute) |
_Attribute.GetTypeInfoCount(UInt32) |
Возвращает количество предоставляемых объектом интерфейсов для доступа к сведениям о типе (0 или 1). (Унаследовано от Attribute) |
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) |
Предоставляет доступ к открытым свойствам и методам объекта. (Унаследовано от Attribute) |
Применяется к
См. также раздел
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по