Sdílet prostřednictvím


Marshal.SizeOf Metoda

Definice

Vrátí nespravovanou velikost třídy v bajtech.

Přetížení

SizeOf(Object)
Zastaralé.

Vrátí nespravovanou velikost objektu v bajtech.

SizeOf(Type)
Zastaralé.

Vrátí velikost nespravovaného typu v bajtech.

SizeOf<T>()

Vrátí velikost nespravovaného typu v bajtech.

SizeOf<T>(T)

Vrátí nespravovanou velikost objektu zadaného typu v bajtech.

SizeOf(Object)

Zdroj:
Marshal.cs
Zdroj:
Marshal.cs
Zdroj:
Marshal.cs

Upozornění

SizeOf(Object) may be unavailable in future releases. Instead, use SizeOf<T>(). For more info, go to http://go.microsoft.com/fwlink/?LinkID=296514

Vrátí nespravovanou velikost objektu v bajtech.

public:
 static int SizeOf(System::Object ^ structure);
[System.Obsolete("SizeOf(Object) may be unavailable in future releases. Instead, use SizeOf<T>(). For more info, go to http://go.microsoft.com/fwlink/?LinkID=296514")]
public static int SizeOf (object structure);
public static int SizeOf (object structure);
[System.Runtime.InteropServices.ComVisible(true)]
public static int SizeOf (object structure);
[<System.Obsolete("SizeOf(Object) may be unavailable in future releases. Instead, use SizeOf<T>(). For more info, go to http://go.microsoft.com/fwlink/?LinkID=296514")>]
static member SizeOf : obj -> int
static member SizeOf : obj -> int
[<System.Runtime.InteropServices.ComVisible(true)>]
static member SizeOf : obj -> int
Public Shared Function SizeOf (structure As Object) As Integer

Parametry

structure
Object

Objekt, jehož velikost má být vrácena.

Návraty

Velikost zadaného objektu v nespravovaném kódu.

Atributy

Výjimky

Parametr structure je null.

Příklady

Následující příklad vytvoří spravovanou strukturu, přenese ji do nespravované paměti a pak ji přenese zpět do spravované paměti. Tento příklad používá metodu SizeOf k určení, kolik nespravované paměti se má přidělit.

using System;
using System.Runtime.InteropServices;

public struct Point
{
    public int x;
    public int y;
}

class Example
{

    static void Main()
    {

        // Create a point struct.
        Point p;
        p.x = 1;
        p.y = 1;

        Console.WriteLine("The value of first point is " + p.x + " and " + p.y + ".");

        // Initialize unmanged memory to hold the struct.
        IntPtr pnt = Marshal.AllocHGlobal(Marshal.SizeOf(p));

        try
        {

            // Copy the struct to unmanaged memory.
            Marshal.StructureToPtr(p, pnt, false);

            // Create another point.
            Point anotherP;

            // Set this Point to the value of the
            // Point in unmanaged memory.
            anotherP = (Point)Marshal.PtrToStructure(pnt, typeof(Point));

            Console.WriteLine("The value of new point is " + anotherP.x + " and " + anotherP.y + ".");
        }
        finally
        {
            // Free the unmanaged memory.
            Marshal.FreeHGlobal(pnt);
        }
    }
}
Imports System.Runtime.InteropServices



Public Structure Point
    Public x As Integer
    Public y As Integer
End Structure


Module Example


    Sub Main()

        ' Create a point struct.
        Dim p As Point
        p.x = 1
        p.y = 1

        Console.WriteLine("The value of first point is " + p.x.ToString + " and " + p.y.ToString + ".")

        ' Initialize unmanged memory to hold the struct.
        Dim pnt As IntPtr = Marshal.AllocHGlobal(Marshal.SizeOf(p))

        Try

            ' Copy the struct to unmanaged memory.
            Marshal.StructureToPtr(p, pnt, False)

            ' Create another point.
            Dim anotherP As Point

            ' Set this Point to the value of the 
            ' Point in unmanaged memory. 
            anotherP = CType(Marshal.PtrToStructure(pnt, GetType(Point)), Point)

            Console.WriteLine("The value of new point is " + anotherP.x.ToString + " and " + anotherP.y.ToString + ".")

        Finally
            ' Free the unmanaged memory.
            Marshal.FreeHGlobal(pnt)
        End Try

    End Sub
End Module

Poznámky

Tato metoda přijímá instanci struktury, což může být typ odkazu nebo typ hodnoty v rámečku. Rozložení musí být sekvenční nebo explicitní.

Vrácená velikost je velikost nespravovaného objektu. Nespravované a spravované velikosti objektu se mohou lišit. U typů znaků je velikost ovlivněna hodnotou použitou CharSet pro danou třídu.

Pomocí metody a můžete určit SizeOf , kolik nespravované paměti se má přidělit AllocHGlobalAllocCoTaskMem .

Viz také

Platí pro

SizeOf(Type)

Zdroj:
Marshal.cs
Zdroj:
Marshal.cs
Zdroj:
Marshal.cs

Upozornění

SizeOf(Type) may be unavailable in future releases. Instead, use SizeOf<T>(). For more info, go to http://go.microsoft.com/fwlink/?LinkID=296515

Vrátí velikost nespravovaného typu v bajtech.

public:
 static int SizeOf(Type ^ t);
[System.Obsolete("SizeOf(Type) may be unavailable in future releases. Instead, use SizeOf<T>(). For more info, go to http://go.microsoft.com/fwlink/?LinkID=296515")]
public static int SizeOf (Type t);
public static int SizeOf (Type t);
[<System.Obsolete("SizeOf(Type) may be unavailable in future releases. Instead, use SizeOf<T>(). For more info, go to http://go.microsoft.com/fwlink/?LinkID=296515")>]
static member SizeOf : Type -> int
static member SizeOf : Type -> int
Public Shared Function SizeOf (t As Type) As Integer

Parametry

t
Type

Typ, jehož velikost má být vrácena.

Návraty

Velikost zadaného typu v nespravovaném kódu.

Atributy

Výjimky

Parametr t je definice obecného typu.

Parametr t je null.

Příklady

Následující příklad ukazuje volání SizeOf metody . Tento příklad kódu je součástí většího příkladu Marshal pro třídu .

// Demonstrate the use of the SizeOf method of the Marshal
// class.
Console::WriteLine("Number of bytes needed by a Point object: {0}",
    Marshal::SizeOf(Point::typeid));
Point point;
Console::WriteLine("Number of bytes needed by a Point object: {0}",
    Marshal::SizeOf(point));
// Demonstrate the use of the SizeOf method of the Marshal class.
Console.WriteLine("Number of bytes needed by a Point object: {0}",
    Marshal.SizeOf(typeof(Point)));
Point p = new Point();
Console.WriteLine("Number of bytes needed by a Point object: {0}",
    Marshal.SizeOf(p));
' Demonstrate the use of the SizeOf method of the Marshal class.
Console.WriteLine("Number of bytes needed by a Point object: {0}", Marshal.SizeOf(GetType(Point)))
Dim p As New Point()
Console.WriteLine("Number of bytes needed by a Point object: {0}", Marshal.SizeOf(p))

Poznámky

Tuto metodu můžete použít, pokud nemáte strukturu. Rozložení musí být sekvenční nebo explicitní.

Vrácená velikost je velikost nespravovaného typu. Nespravované a spravované velikosti objektu se mohou lišit. U typů znaků je velikost ovlivněna hodnotou použitou CharSet pro danou třídu.

Viz také

Platí pro

SizeOf<T>()

Zdroj:
Marshal.cs
Zdroj:
Marshal.cs
Zdroj:
Marshal.cs

Vrátí velikost nespravovaného typu v bajtech.

public:
generic <typename T>
 static int SizeOf();
public static int SizeOf<T> ();
static member SizeOf : unit -> int
Public Shared Function SizeOf(Of T) () As Integer

Parametry typu

T

Typ, jehož velikost má být vrácena.

Návraty

Velikost typu v bajtech, která je určena parametrem T obecného typu.

Poznámky

Tuto metodu můžete použít, pokud nemáte strukturu. Rozložení musí být sekvenční nebo explicitní.

Vrácená velikost je velikost nespravovaného typu. Nespravované a spravované velikosti objektu se mohou lišit. U typů znaků je velikost ovlivněna hodnotou použitou CharSet pro danou třídu.

Platí pro

SizeOf<T>(T)

Zdroj:
Marshal.cs
Zdroj:
Marshal.cs
Zdroj:
Marshal.cs

Vrátí nespravovanou velikost objektu zadaného typu v bajtech.

public:
generic <typename T>
 static int SizeOf(T structure);
public static int SizeOf<T> (T structure);
static member SizeOf : 'T -> int
Public Shared Function SizeOf(Of T) (structure As T) As Integer

Parametry typu

T

Typ parametru structure.

Parametry

structure
T

Objekt, jehož velikost má být vrácena.

Návraty

Velikost zadaného objektu v nespravovaném kódu v bajtech.

Výjimky

Parametr structure je null.

Poznámky

Tato metoda přijímá instanci struktury, což může být typ odkazu nebo typ hodnoty v rámečku. Rozložení musí být sekvenční nebo explicitní.

Vrácená velikost je velikost nespravovaného objektu. Nespravované a spravované velikosti objektu se mohou lišit. U typů znaků je velikost ovlivněna hodnotou použitou CharSet pro danou třídu.

Pomocí metody a můžete určitSizeOf<T>(T), kolik nespravované paměti se má přidělitAllocHGlobal.AllocCoTaskMem

Platí pro