0

我有两个 .cs 文件(Hex2Bin.csProgram.cs),我想将变量end_addrProgram.csHex2Bin.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# 很陌生。谢谢。

4

5 回答 5

2

staticC# 在变量方面不像 C 那样工作。您可以通过将变量设为字段来使该变量在类end_addr外部可用。默认情况下,字段是.Programpublicprivate

public static end_addr = 0x0000;

然后可以像这样访问它:

var x = Program.end_addr;

但是,我建议您花更多时间熟悉 C# 习惯用法和约定。似乎您仍在从 C 的角度考虑 C#,并且它们非常不同。

于 2012-08-09T21:39:20.447 回答
0

end_addr标记为public这样就足够了

public static short end_addr = 0x0000;

然后你可以像这样从任何地方访问它

Program.end_addr

尽管使用属性而不是字段来公开数据是一种更好的做法。

// Property
public static short end_addr { get; private set; }

// Constructor
public Program()
{
    // Initialize property value.
    end_addr = 0x0000;
}
于 2012-08-09T21:39:07.780 回答
0

如果您像这样声明变量:

public static short end_addr = 0x0000;

然后从另一个类中,您可以像这样使用它:

Program.end_addr

但不要这样做,不是面向对象的!

如果您的类 Hex2Bin 由 Program 类的 Main 方法使用/调用,您应该能够将变量作为您调用的方法的输入参数传递或将它们设置为您使用的类/对象的属性...

于 2012-08-09T21:40:19.643 回答
0

鉴于您在 C 方面的背景,我认为您可能将运行时与编译时问题混为一谈。

但是,在 Hex2Bin.cs 中,您可以创建一个更新静态变量的静态方法。

class Hex2Bin 
{
    static short end_addr = 0x0000;
    static void updateEndAddr(short endAddr)
    {
        end_addr = endAddr;
    }
}
于 2012-08-09T21:40:24.180 回答
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_addrfrom的值Program.cs

另一种方法是将它直接传递给将使用它的方法:

Hex2Bin.Method(end_addr);

在 Hex2Bin 文件中:

public static void Method(short endAddress)
{
    //... do the work here
}
于 2012-08-09T21:40:30.847 回答