wtq40cy3n
wtq40cy3n
CC#
Created by wtq40cy3n on 4/12/2024 in #help
How to understand pining static field, const and instance field
I am learning unsafe C#, and trying to understand when to use fixed statement. Here's the example:
class K { public int k; }
struct C
{
public int instanceMember;
public readonly static int shared;
public const int con = 0;
unsafe void M(int j, K k)
{
fixed (int* p = &j) { } // CS0213
fixed (int* p = &k.k) { }
int local = 0;
fixed (int* p = &local) { } // CS0213
int[] localArray = [];
fixed (int* p = localArray) fixed (int* pp = p) { } // CS8385
string localString = "abc";
fixed (char* p = localString) fixed (char* pp = p) { } // CS8385
K kk = new();
fixed (int* p = &kk.k) { }
fixed (int* p = &this.instanceMember) { }
fixed (int* p = &C.shared) { }
fixed (int* p = &C.con) { } // CS0211
}
}
class K { public int k; }
struct C
{
public int instanceMember;
public readonly static int shared;
public const int con = 0;
unsafe void M(int j, K k)
{
fixed (int* p = &j) { } // CS0213
fixed (int* p = &k.k) { }
int local = 0;
fixed (int* p = &local) { } // CS0213
int[] localArray = [];
fixed (int* p = localArray) fixed (int* pp = p) { } // CS8385
string localString = "abc";
fixed (char* p = localString) fixed (char* pp = p) { } // CS8385
K kk = new();
fixed (int* p = &kk.k) { }
fixed (int* p = &this.instanceMember) { }
fixed (int* p = &C.shared) { }
fixed (int* p = &C.con) { } // CS0211
}
}
The question is, why can I pin a static field? Is it because static field live during the whole cycle, so it's managed? And what about const, is it because const isn't a variable or field so simply can't get the address? And for instance field, since it's fixed inside the instance method, so ...? I don't really know how to explain this. Please let me know if I understand them wrong, thank you!
10 replies
CC#
Created by wtq40cy3n on 1/5/2024 in #help
What's the proper way to build source generator?
No description
5 replies