对于狂热的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”。
谢谢!
答案 0 :(得分:2)
为此目的使用StringBuilder。
表示可变字符串。
答案 1 :(得分:1)
看起来你想要存储对引用的引用(比如指向指针的指针)。做这样的事情的一种方法是传递一个方法,将字符串设置为你的类:
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;});
}
}
一旦你的类有这个字符串设置方法,你可以调用该方法来设置字符串。
答案 2 :(得分:1)
您必须使用中间包装类:
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;
}
}
答案 3 :(得分:0)
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);
}
}
}