我有两个.cs文件(Hex2Bin.cs
和Program.cs
),我想将变量end_addr
从Program.cs
传递给Hex2Bin.cs
我在Program.cs中的代码:
class Program
{
enum to_exit {
exit_ok = 0,
exit_invalid_args,
exit_to_few_args,
exit_invalid_input_file,
exit_invalid_args_file,
exit_permission_denied,
exit_unexpected_eof
};
// class value holders
static String args_file_name = "";
static String in_u1_name = "";
static String in_u22_name = "";
static String out_name = "";
static short end_addr = 0x0000; // 4-digit Hexadecimal end address
static Byte[] version_code = { 0, 0, 0, 0 }; // 3 bytes version, 1 for extra info
}
无论如何我能做到这一点吗?我知道怎么用c做,但我对c#很新。感谢。
答案 0 :(得分:2)
对于static
变量,C#不像C一样工作。您可以将变量end_addr
设置为Program
类之外的public
字段。默认情况下,字段为private
。
public static end_addr = 0x0000;
然后就可以这样访问:
var x = Program.end_addr;
但是,我建议您花一点时间熟悉C#习语和惯例。看起来你仍然在思考C语言中的C#,它们是非常不同的。
答案 1 :(得分:0)
将end_addr
标记为public
就足够了
public static short end_addr = 0x0000;
然后你可以从任何地方访问它
Program.end_addr
虽然使用properties而不是字段来公开数据,但这是一种更好的做法。
// Property
public static short end_addr { get; private set; }
// Constructor
public Program()
{
// Initialize property value.
end_addr = 0x0000;
}
答案 2 :(得分:0)
如果您声明变量如下:
public static short end_addr = 0x0000;
然后从另一个班级你可以像这样使用它:
Program.end_addr
但不要这样做,不是面向对象的!
如果您的类Hex2Bin由Program类的Main方法使用/调用,您应该能够将您的变量作为您调用的方法的输入参数传递,或将它们设置为您使用的类/对象的属性...
答案 3 :(得分:0)
考虑到你在C中的背景,我认为你可能会将运行时与编译时问题混在一起。
但是,在Hex2Bin.cs中,您可以创建一个更新静态变量的静态方法。
class Hex2Bin
{
static short end_addr = 0x0000;
static void updateEndAddr(short endAddr)
{
end_addr = endAddr;
}
}
答案 4 :(得分:0)
你在谈论'文件',但你真正想做的是将数据从你的程序的入口点(Program.cs
)传递给一个类的对象(或静态类的方法)处理数据,对不对?
如果是这样,这应该很简单。你要么修改你的Program.cs并创建一个类的实例(来自Hex2Bin.cs的那个),就像这样
...
Hex2Bin hex2bin = new Hex2Bin( end_addr );
...
我认为Hex2Bin如下:
public class Hex2Bin
{
private short endAddress;
public Hex2Bin( short endAddress )
{
this.endAddress = endAddress;
}
}
这样您就可以使用end_addr
Program.cs
的值
另一种方法是将其直接传递给将使用它的方法:
Hex2Bin.Method(end_addr);
并在Hex2Bin文件中:
public static void Method(short endAddress)
{
//... do the work here
}