2013-04-08 53 views
0

对不起,提出这样一个简单的问题,但我还没有找到答案通过搜索。在c中访问一个实例类的静态类型#

那么,在c#中,是否有可能通过类的一个实例访问一个类的字段(其值不需要改变),以及如何使用类的静态字段班级的名字?

例如,如果我有

public class Myclass 
{ 
    public int a = 0; 
} 

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

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

int c = Myclass.a; 

制作INT静态或const没有按没有帮助,有没有办法做到这一点?感谢任何答案。

+0

那么你想静态访问一个实例字段,在这种情况下,你想要哪些实例值,或者你想通过实例访问一个静态字段,在这种情况下,为什么你需要这样做,而不是通过类直接访问它? – Servy 2013-04-08 18:47:43

+0

预处理器指令如何,如果您需要通过它们不能访问它们? – SGM1 2013-04-08 18:52:46

+0

我想使用实例访问静态字段。这是因为我有15个具有相同类型静态字段的类,我想通过以相同方式处理所有类来简化代码,甚至可以不通过创建var实例来为不同类重复代码 – HyApp 2013-04-08 19:03:52

回答

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() { } 
} 

但你可以看到它是真正哈克。你真的在这里混合了面向对象的概念。访问static值 - MyClass.a - 与实例值之间存在明显差异。只需处理创建实例。

0

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

0

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

0

这是不可能做到这一点,是因为:

(1)语言阻止你通过一个实例引用访问静态字段,

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

0

可能不是一个好主意,不过,你也许能够做这样

class Class1 
{ 
    public static int staticBlah = 0; 

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


} 

当然,你并没有使用,而是使用相同的名字,但你会访问同一个变量。

相关问题