能够通过"参考"?为值类型分配值的最佳做法是什么?在我的情况下,我需要这个可以通过应用程序内控制台为int,float等分配值。我不想提供对包含值类型的对象的引用,因为这不会使我的控制台管理器通用,并且添加新命令将是一场噩梦。另外我不能使用指针,因为在我的情况下不可能使用不安全模式。
因为我对CLR的了解很少,我尝试过这样的事情:
int i = 1;
object o = i;
o = (object) 5;
Console.WriteLine(i);// prints original value of i, 1. I expected 5;
所以它没有用,所以我找到了这个类:
using System.Collections.Generic;
using System.Collections;
using System;
public class Pointer < T >
{
private Func<T> getter;
private Action<T> setter;
public Pointer ( Func<T> getter, Action<T> setter )
{
this.getter = getter;
this.setter = setter;
}
public T Value
{
get { return getter(); }
set { setter(value); }
}
}
由于这个原因,我可以为值类型赋值,比如像这样引用:
int i = 1;
Pointer ptr = new Pointer<int>(()=>i, x=>{i=x;})
ptr.Value = 5;
Console.WriteLine(i);// prints as expected 5;
有效,但正如你所看到的那样,这是非常不优雅的方式(至少我认为不是这样)。
所以问题仍然存在。在这种情况下,最佳做法是什么?
干杯
答案 0 :(得分:0)
官方回答:
您永远不应公开对您的会员的直接访问权限。您希望可修改的值应位于容器对象(模型)中。该模型的所有修改都应由一个机构(控制器)完成。
非正式回答:
使用反射,您甚至可以访问值类型字段并获取或设置其值。
如果这没有帮助,我需要更清楚地了解你想要达到的目标。
答案 1 :(得分:-2)
这不是c#方式。最简单的决定是使用静态字段创建类并更改它。