如何定义一个“引用别的变量”的变量 ( 积分: 100 )

憨憨

Unregistered / Unconfirmed
GUEST, unregistred user!
比如,我定义了一个字符串变量 string s1 = "abc";
希望再定义一个变量 s2,类似 ref string s2 = ref s1;
以便达到这个目的:无论s1的值变成什么,通过s2获得的都是s1最新的值
另外,C#能不能编译成本地代码呢
 
楼主可以使用指针的呀!
var
s1: String;
s2: PString;
begin
s1 := 'asdfg';
s2 := @s1;
ShowMessage(s2^);//显示的会是s1的值,
end;
 
我要的C#中的解决办法
 
用 absolute 关键字,它使一个变量绝对引用另一个变量的地址,或者干脆说两个变量就是代号不同罢了:
var
s1: string;
s2: string absolute s1;
在早期 pascal 中用的较多,经常用于不同类型变量间的共用,delphi 中不太常见了...
 
C#的字符串和Delphi的一样都是CopyOnWrite写时复制的.所以不能修改变量而不改变引用.
即使使用了unsafe方式也不能使用string类型的指针,因为托管类型不能间接寻址.
好像没有什么办法啊.
 
不懂C#,不过想不到C#要完成这个任务这么难。
 
private string _staffPassword;
public string StaffPassword
{
get{return this._staffPassword;}
set{this._staffPassword = value;}
}
 
??????????????????????[:(!]
 
晕。。。。。。。。。。。。。
s2改成属性就不行了。这样你的无论你的s1怎么变,s2总能取得最新的值。有不明白的可以参考MSDN。
private string s1;
public string s2
{
get{return s1;}
}
 
我要的是 ref string s2 = ref s1,而这个ref s1可以在运行期间改成别的,如 ref sx 等等,也就是说 s2 具体是引用的哪个变量是不确定的
 
你定义一个类来保存这个字符串就行了。自定义的类赋值时传的是指针,这样不就达到目的了。下面例子你会看到显示出来的是最后的赋的值。
public class MyData
{
public string s1;
}
--------------
MyData s1 = new MyData();
MyData s2;
s1.s1 = "aa";
s2 = s1;
s1.s1 = "bb";
MessageBox.Show(s2.s1);
 
这样是可以达到目的,不过也不是我想要的,因为s1实际上是若干不同类/结构体中的一个域,有字符串和整数等几种类型,这些类/结构体不是我可以随便修改的。目前用别的办法绕过去了。
我就是想知道,在C#里面到底有没有与Delphi中的 s2: string absolute s1; 等同的东西。
 
你说你那个s1是若干不同类/结构体中的一个域,那就是说你可以访问到那个类/结构体,既然你可以访问到它了,那还有什么问题???用属性就可以了
private object o;
public string s2
{
get
{
if (o is MyClass)
{
return ((MyClass)o).s1;
}
else
if (o is MyClass2)
{
return ((MyClass2)o).AnyFunctions();
}else
if (o is MyClass3)
{
return ((MyClass3)o).AnyFunctions().s1;
}else
if (o is MyClass4)
{
string ReturnString;
((MyClass3)o).AnyFunctions(ref ReturnString).
return ReturnString;
}
................
else
return "";
}
}
------------------
只要你要访问的那个域不是在一个静态的结构体,又或者是某个事件中的结构体参数就可以了。
 
感觉你说的就是个指针么
 
不怎么了解C#,引用调用或者用属性的方法呢
propery ??? Read F???
 
对,从实质上来说就是想要指针,但正如 wr960204 所说,C#里面即使 unsafe 也并不是所有类型都可以用指针,而且就算是简单类型要给一个指针赋值都比较麻烦
 
换个关于枚举的问题吧:
我有若干种枚举类型,通过typeof(Exxxx)传给方法 ProcEnum ,ProcEnum声明如下:
public void ProcEnum(Type et){...}
问题是:如何从 et 访问枚举类型中的各个成员?
 
rubbish c#,rubbish c# developer
 

Similar threads

回复
0
查看
522
不得闲
S
回复
0
查看
955
SUNSTONE的Delphi笔记
S
S
回复
0
查看
776
SUNSTONE的Delphi笔记
S
顶部