首先,我是C ++开发人员,并且是C#的新手,对不起这个简单的问题。 我正在为本机库创建包装器。
我想在一个类中传递一个值,然后从类中的其他函数(如C ++中的指针)对其进行编辑,我发现它可以在不安全的模式下完成,但是我需要在不安全的情况下进行操作,我敢肯定有可能。
主控制台
namespace ConsoleApp2
{
class Program
{
[STAThread]
static void Main(string[] args)
{
string DATA_VALUE = "Not Set Yet";
new Data_Picker_Form(DATA_VALUE).ShowDialog();
Console.WriteLine("Value is {0}", DATA_VALUE);
Console.ReadKey();
}
}
}
表格代码
using System;
using System.Windows.Forms;
namespace ConsoleApp2
{
public partial class Data_Picker_Form : Form
{
object data_in_obj;
public Data_Picker_Form(string data_in)
{
InitializeComponent();
data_in_obj = data_in;
}
private void button1_Click(object sender, EventArgs e)
{
string data_in_new = data_in_obj as string;
data_in_new = "OUTPUT_VALUE";
this.Close();
}
}
}
不幸的是,它不能正常工作,因此我需要将我的string,int等值传递给新表单,在初始化表单时会创建一个指向原始字符串的实例[如指针],并且可以从其他函数(如按钮)访问ins类点击。
谢谢。
答案 0 :(得分:2)
只需创建一个类或结构,它就可以容纳您需要的所有数据。
using System;
namespace ConsoleApp2
{
public class data_to_pass //// Don't forget to use 'public'
{
//// Put your values here
public int a_int_value { get; set; }
public string a_string_value { get; set; }
public bool a_boolean_value { get; set; }
}
class Program
{
[STAThread]
static void Main(string[] args)
{
//// Create your values
data_to_pass new_data = new data_to_pass()
{
a_int_value = 10,
a_string_value = "Not Set Yet",
a_boolean_value = true
};
new Data_Picker_Form(new_data).ShowDialog();
Console.WriteLine("Value is {0} , String is {1} , Bool is {2}",
new_data.a_int_value, new_data.a_string_value, new_data.a_boolean_value);
Console.ReadKey();
}
}
}
using System.Windows.Forms;
namespace ConsoleApp2
{
public partial class Data_Picker_Form : Form
{
data_to_pass data_in_obj;
public Data_Picker_Form(data_to_pass data_in)
{
InitializeComponent();
data_in_obj = data_in;
}
private void button1_Click(object sender, EventArgs e)
{
data_in_obj.a_string_value = "OUTPUT_VALUE";
data_in_obj.a_int_value = 666;
data_in_obj.a_boolean_value = false;
this.Close();
}
}
}
输出:
值是666,字符串是OUTPUT_VALUE,布尔是False
玩得开心;)
答案 1 :(得分:1)
您已经拥有一个引用(有点像一个指针),这就是您的问题(无论如何,它是其中的一半)。
string data_in_new = data_in_obj as string;
要创建一个变量来保存字符串引用(因为字符串是不可变的引用类型),然后将当前引用data_in_obj
复制到该变量。然后,当您重新分配data_in_new
时,它当然不会影响任何其他变量(就像在C ++中一样)。
由于字符串是不可变的,因此该代码无法影响指向该字符串的其他事物(通过引用传递,但这与变量/成员有关)。您需要将其存储在简单的结构或类中,以便每个人都指向一个持有当前字符串引用并可以更新的对象。
与int
的想法相同,它实际上是一个值类型,因此任何副本都将复制实际值,您不能通过它更改其他变量。您需要一个包装器类,以便每个用户都指向同一对象。
答案 2 :(得分:1)
既然已经在初始化表单,那么如何设置一个简单的get and set函数呢?
您的表单:
private string data_in_new = "";
public Data_Picker_Form(string DATA_VALUE)
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Data_in_new = "OUTPUT_VALUE";
Close();
}
public string Data_in_new
{
get
{
return data_in_new;
}
set
{
data_in_new = value;
}
}
在控制台中:
class Program
{
static void Main(string[] args)
{
string DATA_VALUE = "Not Set Yet";
Data_Picker_Form D_P_T = new Data_Picker_Form(DATA_VALUE);
D_P_T.ShowDialog();
DATA_VALUE = D_P_T.Data_in_new;
Console.WriteLine("Value is {0}", DATA_VALUE);
Console.ReadKey();
}
}
通过这种方式,您可以在项目中的任何所需位置获取价值。