Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#指向变量的指针_C#_Design Patterns_Pointers - Fatal编程技术网

c#指向变量的指针

c#指向变量的指针,c#,design-patterns,pointers,C#,Design Patterns,Pointers,问题 我的继承层次结构如下所示: BaseController Object1Controller Object2Controller Object3Controller Object3_1Controller class modifier<T> T* pointerToValue void assignModifiable(T*) template <class T> class ModifierInterface {

问题

我的继承层次结构如下所示:

BaseController
    Object1Controller
    Object2Controller
    Object3Controller
        Object3_1Controller
class modifier<T>
T* pointerToValue
void assignModifiable(T*)
template <class T> class ModifierInterface
{
    T* modifiableVariable;
    void setModifier( T &target )
    { modifiableVariable = target }

    void changeModifiable( T val )
    { modifiableVariable = val }
}
对象1、2和3的实例使用基本控制器中的值计算值,但对象3_1不计算值

这些对象可以附加其他对象,这些对象可以在一段时间内修改基本值,然后将其恢复为缓存值。(忽略这场OO噩梦的可怕含义:P)

我希望能够做到的是:

BaseController
    Object1Controller
    Object2Controller
    Object3Controller
        Object3_1Controller
class modifier<T>
T* pointerToValue
void assignModifiable(T*)
template <class T> class ModifierInterface
{
    T* modifiableVariable;
    void setModifier( T &target )
    { modifiableVariable = target }

    void changeModifiable( T val )
    { modifiableVariable = val }
}
类修饰符
T*指针值
无效可转让可修改(T*)
这样,每个可修改类都会创建一个修饰符,并使其指向要修改的变量。C++等价物是这样的:

BaseController
    Object1Controller
    Object2Controller
    Object3Controller
        Object3_1Controller
class modifier<T>
T* pointerToValue
void assignModifiable(T*)
template <class T> class ModifierInterface
{
    T* modifiableVariable;
    void setModifier( T &target )
    { modifiableVariable = target }

    void changeModifiable( T val )
    { modifiableVariable = val }
}
模板类修改器接口
{
T*可修改变量;
无效设置修改器(T和目标)
{modifiableVariable=target}
无效可更改可修改(T val)
{modifiableVariable=val}
}

这里的答案似乎是针对您的值的包装类:

class Modifiable<T>
{
    public T Value { get; st; }
    ...
}

class Object1Controller : ...
{
    public Modifiable<int> MyValue { get; private set; }
}
类可修改
{
公共T值{get;st;}
...
}
类Object1Controller:。。。
{
公共可修改的MyValue{get;private set;}
}

这还不完整,但我能理解你的问题。
Modifiable
将具有
int*

的大多数属性,您可以只使用
ref
。无论如何,不使用指针。您必须锁定几乎所有内容,这样会阻塞垃圾收集器。c#很少需要指针。通常,代码绑定到成员属性,而不是绑定到成员变量,因为您可以将委托(函数指针)获取到其getter和setter。这些委托可以关闭(绑定到对象)或打开(接受对象作为第一个参数);SetVal(ref T variable)No,这只允许在参数上使用,您可以在没有(许多)方法的情况下使用。另外,很抱歉,我的问题令人困惑。我正试图想出一个更完整的措辞。谢谢你的帮助。快速提问。这是否一定能确保在源位置更改值?我认为c#不是通过引用传递的。也就是说,objectController1将其可修改性设置为指向基础中的myVar。当我更改modifiable时,myVar更改??类(与结构相反)通过引用传递
Modifiable
是一个类。阅读有关值类型和引用类型的内容,您就会理解为什么我们不需要C语言中的指针#