我有一种感觉,我将会收到很多关于“你N000B”的评论。
我有这堂课:
public partial class FindAndReplace : Form
{
public FindAndReplace()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
}
}
我希望能够做这样的事情来存储在其他函数中使用的引用:
public partial class FindAndReplace : Form
{
SomeRefType m_TabRef; // Dont know what type to use
public FindAndReplace(ref TabControl launguageTabs)
{
InitializeComponent();
m_TabRef = languageTab;
}
private void button1_Click(object sender, EventArgs e)
{
// use m_TabRef here that will change the original I passed in
}
}
一种解决方法是使用TabControl的副本并返回我想要标记的位置。我只是想知道我是否可以使用原版。
如果人们谷歌也可以认为这篇文章可能会有用。
如果这是C ++就很容易:/
答案 0 :(得分:5)
由于TabControl已经是一个引用类型,你可以简单地使用它:
TabControl m_TabRef;
public FindAndReplace(TabControl launguageTabs)
{
m_TabRef = languageTab;
// from now m_TabRef references the object instance
// passed as launguageTabs reference
}
答案 1 :(得分:3)
在C#中,类是引用类型。所以languageTabs
就像一个指向对象的指针,它不是对象本身。因此,你可以写下这个:
public partial class FindAndReplace : Form
{
TabControl m_TabRef; // use TabControl
public FindAndReplace(TabControl launguageTabs)
{
InitializeComponent();
m_TabRef = languageTab;
}
}
这与C#中的struct
不同,它们是值类型。值类型默认按值传递,这就是ref关键字的来源。除非你真的知道它的作用,否则你不应该使用ref关键字。大部分时间你都不需要它。
答案 2 :(得分:2)
你不能拥有班级的ref
成员; ref
仅作为函数参数修饰符有效。
此外,您很可能将传递引用概念(通过ref
公开)与引用类型概念(通过类,它们是引用类型公开)混淆)。
很可能,您只需忘记ref
存在,从代码中删除所有此类引用,它将按您的预期方式工作。如果没有,请更具体地说明您要完成的任务。
答案 3 :(得分:0)
此引用仅作为参考传递帮助,它不是引用类型。
(http://msdn.microsoft.com/en-us/library/14akc2c7.aspx)
你说你想要存储参考资料"
这里有一个双重帖子: Storing a reference in c#