0

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

那么,在 C# 中,是否有可能通过类的实例访问类的字段(其值不需要更改),就像您使用类的名称访问类的静态字段一样班级?

例如,如果我有

public class Myclass
{
    public int a = 0;
}

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

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

int c = Myclass.a;

将 int 设为 static 或 const 无济于事,有什么办法吗?感谢您的任何回答。

4

5 回答 5

0

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

class Class1
{
    public static int staticBlah = 0;

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


}

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

于 2013-04-08T21:27:45.030 回答
0

如果MyClass是单例,那么是的,你可以这样做,但在你的场景中,这似乎是一个不,因为你在别处实例化它。看,如果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- 和实例值之间存在明显差异。只需处理创建实例。

于 2013-04-08T18:46:28.887 回答
0

这是不可能的。没有类型的实例就不能访问实例字段,C#中不能通过类型的实例访问静态字段,需要通过类型本身来访问。

于 2013-04-08T18:48:42.487 回答
0

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

于 2013-04-08T18:49:09.080 回答
0

这是不可能的,因为:

(1) 该语言阻止您通过实例引用访问静态字段,并且

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

于 2013-04-08T18:49:43.070 回答