ポインタを外部に公開したいということなら、こんな感じですかね。
C#
1using System;
2using System.Runtime.ConstrainedExecution;
3using System.Runtime.InteropServices;
4
5namespace QA261876
6{
7 class Program
8 {
9 static unsafe void Main(string[] args)
10 {
11 var ex = new Example();
12 int* ptr = ex.Buffer;
13 *ptr = 1;
14 Console.WriteLine($"Value={ex.Value}");
15 *ptr = *ptr + 1;
16 Console.WriteLine($"Value={ex.Value}");
17 }
18 }
19
20 public unsafe class Example : CriticalFinalizerObject
21 {
22 private readonly IntPtr handle;
23
24 public Example()
25 {
26 handle = Marshal.AllocHGlobal(sizeof(int));
27 }
28
29 ~Example()
30 {
31 Marshal.FreeHGlobal(handle);
32 }
33
34 public int* Buffer {
35 get {
36 return (int*)handle;
37 }
38 }
39
40 public int Value {
41 get {
42 return *Buffer;
43 }
44 }
45 }
46}
#追記
何がなんでも変数のポインタを公開したいということであれば GC の移動対象外にする必要があるので、GCHandle.Alloc でクラスをピン止めしてください。
C#
1 [StructLayout(LayoutKind.Sequential)]
2 public unsafe class Example2
3 {
4 int buff;
5 GCHandle gch;
6
7 public Example2() {
8 gch = GCHandle.Alloc(this, GCHandleType.Pinned);
9 }
10
11 ~Example2()
12 {
13 gch.Free();
14 }
15
16 public int* Buffer {
17 get {
18 fixed (int* ptr = &buff) {
19 return ptr;
20 }
21 }
22 }
23
24 public int Value {
25 get {
26 return buff;
27 }
28 set {
29 buff = value;
30 }
31 }
32 }
33