FixedAddressValueTypeAttribute Sınıf
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Bir statik değer türü alanının yaşam süresi boyunca adresini düzeltir. Bu sınıf devralınamaz.
public ref class FixedAddressValueTypeAttribute sealed : Attribute
[System.AttributeUsage(System.AttributeTargets.Field)]
public sealed class FixedAddressValueTypeAttribute : Attribute
[System.AttributeUsage(System.AttributeTargets.Field)]
[System.Serializable]
public sealed class FixedAddressValueTypeAttribute : Attribute
[<System.AttributeUsage(System.AttributeTargets.Field)>]
type FixedAddressValueTypeAttribute = class
inherit Attribute
[<System.AttributeUsage(System.AttributeTargets.Field)>]
[<System.Serializable>]
type FixedAddressValueTypeAttribute = class
inherit Attribute
Public NotInheritable Class FixedAddressValueTypeAttribute
Inherits Attribute
- Devralma
- Öznitelikler
Örnekler
Aşağıdaki örnekte, statik bir alanı belleğe sabitlemek için özniteliğinin FixedAddressValueTypeAttribute kullanımı gösterilmektedir. Bir Age
yapı tanımlar ve türünde Age
statik alanlara sahip iki sınıf başlatır. İkinci sınıf, alanın adresini sabitlemek için geçerlidir FixedAddressValueTypeAttribute . Bu iki nesnenin örneğini oluşturmadan önce ve sonra bir dizi bellek ayırması yapılır ve atık toplayıcı çağrılır. Örnekten elde edilen çıktı, ilk alanın adresi Age
çöp toplamadan sonra değişmiş olsa da, uygulanan alanın FixedAddressValueTypeAttribute adresinin değişmediğini gösterir.
using System;
using System.Runtime.CompilerServices;
public struct Age {
public int years;
public int months;
}
public class FreeClass
{
public static Age FreeAge;
public static unsafe IntPtr AddressOfFreeAge()
{
fixed (Age* pointer = &FreeAge)
{ return (IntPtr) pointer; }
}
}
public class FixedClass
{
[FixedAddressValueType]
public static Age FixedAge;
public static unsafe IntPtr AddressOfFixedAge()
{
fixed (Age* pointer = &FixedAge)
{ return (IntPtr) pointer; }
}
}
public class Example
{
public static void Main()
{
AllocateMemory();
// Get addresses of static Age fields.
IntPtr freePtr1 = FreeClass.AddressOfFreeAge();
AllocateMemory();
IntPtr fixedPtr1 = FixedClass.AddressOfFixedAge();
AllocateMemory();
// Garbage collection.
GC.Collect();
GC.WaitForPendingFinalizers();
// Get addresses of static Age fields after garbage collection.
IntPtr freePtr2 = FreeClass.AddressOfFreeAge();
IntPtr fixedPtr2 = FixedClass.AddressOfFixedAge();
// Display addresses before and after garbage collection
Console.WriteLine("Normal static: {0} -> {1}", freePtr1, freePtr2);
Console.WriteLine("Pinned static: {0} -> {1}", fixedPtr1, fixedPtr2);
}
// Allocate memory for 100,000 objects.
static public void AllocateMemory()
{
for (int ctr = 0; ctr <= 100000; ctr++)
{
object o = new object();
}
}
}
// The example displays output similar to the following:
// Normal static: 19932420 -> 19863704
// Pinned static: 19985508 -> 19985508
Açıklamalar
Statik değer türlerini oluşturma sırasında FixedAddressValueTypeAttribute sabitlenmiş olarak işaretlemek için özniteliğini kullanın.
Bu öznitelik Microsoft Visual C++ derleyicisi tarafından kullanılır.
Statik değer türü alanları kutulu nesneler olarak oluşturulur. Bu, çöp toplama işlemi gerçekleştirildikçe adreslerinin değişebileceği anlamına gelir. Bu özniteliği statik bir değer türüne uyguladığınızda, adresi yaşam süresi boyunca sabit kalır.
Oluşturucular
FixedAddressValueTypeAttribute() |
FixedAddressValueTypeAttribute sınıfının yeni bir örneğini başlatır. |
Özellikler
TypeId |
Türetilmiş bir sınıfta uygulandığında, bu Attributeiçin benzersiz bir tanımlayıcı alır. (Devralındığı yer: Attribute) |
Yöntemler
Equals(Object) |
Bu örneğin belirtilen bir nesneye eşit olup olmadığını gösteren bir değeri döndürür. (Devralındığı yer: Attribute) |
GetHashCode() |
Bu örneğe ilişkin karma kodu döndürür. (Devralındığı yer: Attribute) |
GetType() |
Type Geçerli örneğini alır. (Devralındığı yer: Object) |
IsDefaultAttribute() |
Türetilmiş bir sınıfta geçersiz kılındığında, bu örneğin değerinin türetilmiş sınıf için varsayılan değer olup olmadığını gösterir. (Devralındığı yer: Attribute) |
Match(Object) |
Türetilmiş bir sınıfta geçersiz kılındığında, bu örneğin belirtilen bir nesneye eşit olup olmadığını gösteren bir değer döndürür. (Devralındığı yer: Attribute) |
MemberwiseClone() |
Geçerli Objectöğesinin sığ bir kopyasını oluşturur. (Devralındığı yer: Object) |
ToString() |
Geçerli nesneyi temsil eden dizeyi döndürür. (Devralındığı yer: Object) |
Belirtik Arabirim Kullanımları
_Attribute.GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) |
Bir ad kümesini karşılık gelen bir dağıtma tanımlayıcısı kümesine eşler. (Devralındığı yer: Attribute) |
_Attribute.GetTypeInfo(UInt32, UInt32, IntPtr) |
Bir arabirimin tür bilgilerini almak için kullanılabilecek bir nesnenin tür bilgilerini alır. (Devralındığı yer: Attribute) |
_Attribute.GetTypeInfoCount(UInt32) |
Bir nesnenin sağladığı tür bilgisi arabirimlerinin sayısını alır (0 ya da 1). (Devralındığı yer: Attribute) |
_Attribute.Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) |
Bir nesne tarafından sunulan özelliklere ve yöntemlere erişim sağlar. (Devralındığı yer: Attribute) |