在c#中访问实例类的静态-kind字段

时间:2013-04-08 18:44:12

标签: c#

很抱歉提出这么简单的问题,但我还没有通过搜索找到答案。

因此,在c#中,是否有可能通过类的实例访问类的字段(其值不需要更改),并且访问类的静态字段使用类的名称?

例如,如果我有

public class Myclass
{
    public int a = 0;
}

我想在代码的其他地方做另一个类

Myclass instance = new Myclass();
int b = instance.a;

int c = Myclass.a;

使int成为静态或const无助,有没有办法做到这一点?谢谢你的回答。

5 个答案:

答案 0 :(得分:0)

如果MyClass是Singleton然后是,那么你可以这样做,但是在你的场景中,它似乎是一个no,因为你在其他地方实例化它。看,如果MyClass是单身人士,你可以这样做:

public class MyClass
{
    private static MyClass _instance = new MyClass();

    public static MyClass Instance { get { return _instance; } }

    public int A { get; set; }
    public static int a { get { return _instance.A; } }

    private MyClass() { }
}

但你可以看到它真的 hacky。你真的在这里混合OO概念。访问static值 - MyClass.a - 与实例值之间存在明显差异。只需处理创建实例。

答案 1 :(得分:0)

这是不可能的。如果没有该类型的实例,则无法访问实例字段,并且无法通过C#中的类型实例访问静态字段,您需要通过类型本身访问它。

答案 2 :(得分:0)

据我所知,这是不可能的。可能是你需要改变实施方式。

答案 3 :(得分:0)

这是不可能的,因为:

(1)该语言阻止您通过实例引用和

访问静态字段

(2)您不能有两个具有相同名称的字段。 (所以你不能有一个同名的静态和非静态字段。)

答案 4 :(得分:0)

可能不是一个好主意,但你仍然可以像这样做

class Class1
{
    public static int staticBlah = 0;

    public int blah { 
        get{return Class1.staticBlah;} 
        set{Class1.staticBlah = value;} 
    }


}

当然,您没有使用完全相同的名称,但您将访问相同的变量。