Share via


OutAttribute Kelas

Definisi

Menunjukkan bahwa data harus di-marshalasi dari penerima panggilan kembali ke pemanggil.

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
Warisan
OutAttribute
Atribut

Contoh

Contoh berikut menunjukkan cara menerapkan InAttribute dan OutAttribute ke platform memanggil prototipe yang meneruskan array sebagai parameter. Kombinasi atribut arah memungkinkan pemanggil untuk melihat perubahan yang dibuat oleh penerima panggilan.

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

Keterangan

Anda dapat menerapkan atribut ini ke parameter.

bersifat OutAttribute opsional. Atribut ini hanya didukung untuk interop COM dan platform. Dengan tidak adanya pengaturan eksplisit, interop marshaler mengasumsikan aturan berdasarkan jenis parameter, apakah parameter diteruskan oleh referensi atau berdasarkan nilai, dan apakah jenisnya dapat diputar atau tidak dapat diputar. Misalnya, StringBuilder kelas selalu diasumsikan sebagai Masuk/Keluar dan array string yang diteruskan oleh nilai diasumsikan Masuk.

Perilaku out-only tidak pernah menjadi perilaku marshaling default untuk parameter. Anda dapat menerapkan ke nilai dan jenis referensi yang OutAttribute diteruskan oleh referensi untuk mengubah perilaku Masuk/Keluar ke Perilaku di luar saja, yang setara dengan menggunakan out kata kunci di C#. Misalnya, array yang diteruskan oleh nilai, dinamai sebagai Parameter hanya dalam secara default, dapat diubah menjadi Out-only. Namun, perilaku tidak selalu memberikan semantik yang diharapkan ketika jenis termasuk elemen atau bidang yang dapat di-blittable karena interop marshaler menggunakan penyematan. Jika Anda tidak peduli tentang meneruskan data ke penerima panggilan, Marshaling khusus keluar dapat memberikan performa yang lebih baik untuk jenis yang tidak dapat di-blittable.

InAttribute Menggabungkan dan OutAttribute sangat berguna ketika diterapkan ke array dan jenis yang diformat dan tidak dapat di-blittable. Penelepon melihat perubahan yang dilakukan penerima panggilan pada jenis ini hanya saat Anda menerapkan kedua atribut. Karena jenis ini memerlukan penyalinan selama marshaling, Anda dapat menggunakan InAttribute dan OutAttribute untuk mengurangi salinan yang tidak perlu.

Untuk informasi selengkapnya tentang efek pada OutAttribute perilaku marshaling, lihat Atribut Arah.

Konstruktor

OutAttribute()

Menginisialisasi instans baru kelas OutAttribute.

Properti

TypeId

Ketika diimplementasikan di kelas turunan, mendapatkan pengidentifikasi unik untuk ini Attribute.

(Diperoleh dari Attribute)

Metode

Equals(Object)

Mengembalikan nilai yang menunjukkan apakah instans ini sama dengan objek tertentu.

(Diperoleh dari Attribute)
GetHashCode()

Mengembalikan kode hash untuk instans ini.

(Diperoleh dari Attribute)
GetType()

Mendapatkan instans Type saat ini.

(Diperoleh dari Object)
IsDefaultAttribute()

Ketika ditimpa di kelas turunan, menunjukkan apakah nilai instans ini adalah nilai default untuk kelas turunan.

(Diperoleh dari Attribute)
Match(Object)

Saat ditimpa di kelas turunan, mengembalikan nilai yang menunjukkan apakah instans ini sama dengan objek tertentu.

(Diperoleh dari Attribute)
MemberwiseClone()

Membuat salinan dangkal dari yang saat ini Object.

(Diperoleh dari Object)
ToString()

Mengembalikan string yang mewakili objek saat ini.

(Diperoleh dari Object)

Implementasi Antarmuka Eksplisit

_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr)

Memetakan sekumpulan nama ke sekumpulan pengidentifikasi pengiriman yang sesuai.

(Diperoleh dari Attribute)
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr)

Mengambil informasi jenis untuk objek, yang dapat digunakan untuk mendapatkan informasi jenis untuk antarmuka.

(Diperoleh dari Attribute)
_Attribute.GetTypeInfoCount(UInt32)

Mengambil jumlah antarmuka informasi jenis yang disediakan objek (baik 0 atau 1).

(Diperoleh dari Attribute)
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr)

Menyediakan akses ke properti dan metode yang diekspos oleh objek.

(Diperoleh dari Attribute)

Berlaku untuk

Lihat juga