Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.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
是否在.net中引用引用引用类型?_.net_Pointers_Reference - Fatal编程技术网

是否在.net中引用引用引用类型?

是否在.net中引用引用引用类型?,.net,pointers,reference,.net,Pointers,Reference,所以我想要一个指向指针的指针 我有一个在一个对象中更新的类。在另一个对象中,我希望引用原始类中对象的当前版本。这里有一个简单的版本,我正在进行 Public Class Foo 'conaints information End Class Public Class myMainApp Dim myHelper As HelperClass Dim currentFoo As Foo Private Sub init() currentFoo

所以我想要一个指向指针的指针

我有一个在一个对象中更新的类。在另一个对象中,我希望引用原始类中对象的当前版本。这里有一个简单的版本,我正在进行

Public Class Foo
    'conaints information

End Class

Public Class myMainApp
    Dim myHelper As HelperClass
    Dim currentFoo As Foo

    Private Sub init()
        currentFoo = New Foo()
        myHelper = New HelperClass(currentFoo)
    End Sub

    Private Sub UpdatingUI()
        currentFoo = GetFooFromContext()
    End Sub

    Private Function GetFooFromContext() As Foo
        Return New Foo()
    End Function
End Class


Public Class HelperClass
    Private myFoo As Foo

    Public Sub New(ByVal aFoo As Foo)
        myFoo = aFoo
    End Sub
End Class
<>如果THISE是C++,CurrutFoo将是一个Foo*,HelperClass的MyFo会是一个Foo*,这样每当我们更新CurrutFoo的一个新对象的对象时,HelPrError也将访问这个新的对象。
在.net世界中,是否有语法可以实现这一点?

没有与之直接等价的语法


最好的选择通常是让HelperClass实际保留对主类的引用,并根据需要从主类上的属性读取/写入Foo。这样,它就引用了持有Foo的类,而不是Foo本身。但是,这仍然是不一样的,因为如果您更改主类“Foo”实例,您将丢失对原始类的引用(除非您也保存了该引用)。

没有与此直接等效的方法

最好的选择通常是让HelperClass实际保留对主类的引用,并根据需要从主类上的属性读取/写入Foo。这样,它就引用了持有Foo的类,而不是Foo本身。不过,这还是不一样的,因为如果更改主类“Foo”实例,将丢失对原始类的引用(除非也保存了该引用)。

不要再考虑指针了 是的,你可以使用不安全的代码完全按照你在C#中的想法去做——但说真的,不要这样做

里德的建议是迄今为止最好的;我怀疑,在更多的背景下,我们可以提出更好的解决方案,例如:

  • 使用currentfoo的属性
  • 设置currentfoo的值时,更改helper类的foo属性的值
我主要是想强调这个问题中的“天哪,不要做”这一方面;-)

别再想指针了 是的,你可以使用不安全的代码完全按照你在C#中的想法去做——但说真的,不要这样做

里德的建议是迄今为止最好的;我怀疑,在更多的背景下,我们可以提出更好的解决方案,例如:

  • 使用currentfoo的属性
  • 设置currentfoo的值时,更改helper类的foo属性的值

我主要是想强调这个问题中的“天哪,不要做”这一方面;-)

Reed的答案是处理这个问题的典型惯用C#方法,但如果您真的需要,您可以随时引入自己的“引用包装器”帮助器类:

public class Reference<T> where T : class
{
    public T Value { get; set; }
}
公共类引用,其中T:class
{
公共T值{get;set;}
}

然后将
currentFoo
myFoo
声明为
Reference
,并确保
currentFoo
readonly
,以便任何人都不能为其分配不同的
Reference

Reed的答案是处理这个问题的典型惯用C#方法,但如果您真的需要,您可以随时引入自己的“引用包装器”帮助器类:

public class Reference<T> where T : class
{
    public T Value { get; set; }
}
公共类引用,其中T:class
{
公共T值{get;set;}
}

然后将
currentFoo
myFoo
声明为
Reference
,并确保
currentFoo
readonly
,以便任何人都不能为其分配不同的
Reference

您需要共享对以Foo作为属性的类的引用。很抱歉用C#-)写


您需要共享对以Foo作为属性的类的引用。很抱歉用C#-)写


实际上,你不能使用不安全的,因为即使是不安全的也不允许你声明托管类型的原始指针(对象引用是托管类型)。@[Pavel Minaev]:我已经纠正了,谢谢-这就是停止思考指针的原因!实际上,你不能使用不安全的,因为即使是不安全的也不允许你声明托管类型的原始指针(对象引用是托管类型)。@[Pavel Minaev]:我已经纠正了,谢谢-这就是停止思考指针的原因!啊,是的,每件事都在一个抽象的层次上运行得更好。我看到这与我希望我的应用程序的工作方式非常接近,myFooBar保存了我需要的所有上下文信息。不幸的是,所有的东西都是在没有中间层的情况下设置的,因此需要做更多的工作来重新构建应用程序,使其能够像这样工作,但很可能就是解决方案。啊,是的,每件事都在一个更高的抽象级别上工作得更好。我看到这与我希望我的应用程序的工作方式非常接近,myFooBar保存了我需要的所有上下文信息。不幸的是,所有的东西都是在没有中间层的情况下设置的,所以需要做更多的工作来重新构建应用程序,使其能够像这样工作,但可能是解决方案。我知道这是一个好主意,但在这种情况下,主类是一个包含很多内容的表单,我只需要几个对象。对下一个家伙来说,访问主窗体可能非常危险。那么就使用一个接口吧。如果主类实现了一个接口,您可以使用它来公开所需的特定属性,并将表单作为接口而不是类传入。该场景中的另一个选项是定义一个仅包含表单所需属性的接口,让表单实现它,并在
HelperClass
中引用所述接口。这将使耦合量变得明确,从而变得清晰。当然,我们仍然可以将接口引用转换为原始类,但这样做的人至少需要付出努力,并希望停下来思考他们正在做什么。这种接口想法非常酷,我可能最终会使用它,或者类似的东西。我会巧妙地把一些东西藏在我的心理工具箱里。我看得出来