如何在另一个类中保存对对象的引用
本文关键字:对象 引用 保存 另一个 | 更新日期: 2023-09-27 18:14:48
对于c#开发人员来说,这应该是一个非常简单的解决方案。我想改变一个类中的字符串的值,所以在一个线程中,字符串可以改变没有我做任何事情。下面是我的意思的一个小例子,简化了,但你应该明白了。
class A_CLass
{
string keptString;
void keepString( ref string theString )
{
keptString = theString;
}
// This will get called when the thread is triggered
void changeString( string theString )
{
keptString = theString;
}
}
void f1()
{
A_Class a = new A_Class();
string base_string = "asdf";
a.keepString( ref base_string );
...
// Thread is signaled
...
// Now base_string should be "fdsa"
}
void threadedFunction()
{
// When the thread is triggered ...
a.changeString( "fdsa" );
}
基本上我想在A_Class中保持'base_string'的引用,因此线程方法可以更改值,并且在f1()中,我可以看到更改的值,在这种情况下为"fdsa"。
谢谢!
使用StringBuilder实现此目的。
表示一个可变字符串。
看起来您想要存储对引用的引用(就像指针对指针)。这样做的一种方法是传递一个方法,该方法将字符串设置为类,如下所示:
class A_Class
{
Action<string> setter;
void storeSetter( Action<string> setter )
{
this.setter = setter;
}
void callSetter( string str )
{
setter(str);
}
}
然后传入一个lambda,将字符串设置为:
public class OtherClass
{
private string someString;
private void test()
{
var a = new A_Class();
a.keepString((s)=>{someString = s;});
}
}
一旦你的类有了这个字符串设置方法,你就可以调用这个方法来设置字符串。
您必须使用一个中间包装器类:
public class Wrapper<T> // generic, so can be used with any type
{
public T Value { get; set; }
public Wrapper(T val) { Value = val; }
}
class A_CLass
{
Wrapper<string> keptString;
void keepString(string theString)
{
keptString = new Wrapper<string>(theString);
}
void changeString(string theString)
{
keptString.Value = theString;
}
}
class A_Class
{
Ref<string> link;
void A_Class( Ref<string> link)
{
this.link= link;
}
void somefunction( string str )
{
if(link.Value.Length > 2)
link.Value = str;
}
}
public class Ref<T>
{
private Func<T> getter;
private Action<T> setter;
public Ref(Func<T> getter, Action<T> setter)
{
this.getter = getter;
this.setter = setter;
}
public T Value
{
get
{
return getter();
}
set
{
setter(value);
}
}
}