2013-04-08 3 views
0

Извините за задание такого простого вопроса, но я еще не нашел ответа, выполнив поиск.Доступ к статическому полю объекта a класса экземпляра в C#

Итак, возможно ли в C# получить доступ к полю (значение которого не нужно изменять) класса через экземпляр класса, и поскольку вы получили бы доступ к статическому полю класса, используя название класса?

Например, если у меня есть

public class Myclass 
{ 
    public int a = 0; 
} 

Я хочу сделать в другом месте в коде, в другом классе

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

и

int c = Myclass.a; 

Создание ИНТ статический или константную Безразлично Помогите, есть ли способ сделать это? Спасибо за любые ответы.

+0

Итак, вы пытаетесь статически получить доступ к полю экземпляра, в этом случае, какие значения вы хотите или хотите получить статическое поле через экземпляр, и в этом случае, зачем вам это нужно? доступа к нему через класс напрямую? – Servy

+0

Как о директивах препроцессора, не можете ли они получить доступ, если вам это нужно? – SGM1

+0

Я хочу получить доступ к статическому полю с помощью экземпляра. Это связано с тем, что у меня есть ~ 15 классов, которые имеют одинаковые статические поля, и я хотел бы сделать код проще, обработав все классы одинаково, возможно, даже без дублирования кода для разных классов, создав экземпляр var – HyApp

ответ

0

Если MyClass были синглтоном, то да, вы могли бы это сделать, но в вашем сценарии кажется, что это будет не так, потому что вы создаете его в другом месте. Смотрите, если MyClass были Singleton вы могли бы сделать что-то вроде этого:

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 - и значением экземпляра. Просто займитесь созданием экземпляра.

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;} 
    } 


} 

Конечно , вы не используете точно с тем же именем, но вы будете получать доступ к одной и той же переменной.

Смежные вопросы