繁体   English   中英

获取值指针并在其他地方使用它

[英]Getting value pointer and use it from somewhere else

首先,我是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类(如按钮单击)访问它。

谢谢。

只需创建一个类或结构,它就可以容纳您需要的所有数据。

示例(控制台):

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

玩得开心 ;)

您已经有了一个引用(有点像一个指针),这就是您的问题(无论如何,它是其中的一半)。

string data_in_new = data_in_obj as string;

说要创建一个保存字符串引用的变量(因为字符串是不可变的引用类型),然后将引用data_in_obj当前复制到该data_in_obj 然后,当您重新分配data_in_new它当然不会影响任何其他变量(就像在C ++中一样)。

因为字符串是不可变的,所以该代码无法影响指向该字符串的其他事物(除了引用之外,但这与变量/成员有关)。 您需要将其存储在简单的结构或类中,以便每个人都指向一个持有当前字符串引用并可以更新的对象。

int相同,实际上是一个值类型,因此任何副本都将复制实际值,您不能通过它更改其他变量。 您需要一个包装器类,以便每个用户都指向相同的对象。

既然已经在初始化表单,那么如何设置一个简单的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();
   }
  }

通过这种方式,您可以在项目中的任何所需位置访问您的价值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM