2015-09-23 4 views
-2

Я статический класс определяется следующим образом:доступа нестатические члены статического класса

public static class Classroom 
    { 
    public string Name; 
    //other members 
    } 

Как я могу получить доступ к переменной Name в другом классе?

Поскольку это статический класс я не в состоянии создать экземпляр, как этот

Classroom ClassroomObj = new Classroom(); 

Поскольку Name не статична я не могу получить к нему доступ без создания экземпляра. то как я могу получить доступ к переменной?

+7

Вы можете даже не * объявить * не-статические члены внутри статического класса. Этот первый фрагмент кода не будет компилироваться. –

+0

Недопустимый код в стороне - статический статичный, а экземпляры - это экземпляры и никогда не должны совпадать. Вы могли бы также сказать: «У меня есть шоколад в моей машине, как мне получить доступ к ней с помощью концепции автомобилей?» – Octopoid

+3

Я думаю, что downvoting по этому вопросу немного суровый. Это похоже на законный вопрос для программиста-новичков. ОП задает вопрос * почему * код не будет компилироваться, так что помогите ему немного –

ответ

4

Вы должны сделать переменную static, а также:

public static class Classroom 
{ 
    public static string Name; 
    //other members 
} 

Причина заключается в следующем: ваш статический класс можно рассматривать как один экземпляр, доступ к которому осуществляется с использованием его имени, вместо создания экземпляра с new и доступа к нему с использованием имени переменной. Поэтому любое свойство внутри этого статического класса должно также иметь static, так что оно снова доступно, используя имя класса.

+0

Я сомневаюсь, что 'Classroom' должен быть' static' в контексте вопроса: это означает, что есть * один и только один класс. –

+0

Предпосылка моего ответа заключалась в том, что OP понимает, как объекты и экземпляры работают с помощью 'new', но путаются о' static'. Контекст не уточняет, должен ли быть только один экземпляр или нет. – tomab

+0

Именно поэтому ответ должен заключаться в том, чтобы искать ясность, а не публиковать ответ, который в лучшем случае может быть неуместным и в худшем случае может на самом деле способствовать недоразумениям и вредным привычкам;) –

0

Вы не можете объявить членов экземпляра в статическом классе

+0

@freshbm это на самом деле ответ, потому что запрос невозможно достичь. Каков будет ваш ответ на вопрос типа «Как создать пространство имен в C#?» –

4

Что касается static class вы можете»создавать его экземпляры:

public static class MyClass { 
    public static String SomeField; 
    .... 
    } 

    // the class is static, no instances are allowed 
    var o = new MyClass(); // <- Compile time error! 

Однако нестатической (т.е. экземпляра) полей хочет экземпляра, который в случае статического класса не может быть предоставлен в любом случае. Вот почему нестатические поля не разрешены в статических классах. И поэтому вы должны либо изменить свой класс в порядкового один:

// No static 
    public class Classroom 
    { 
    public string Name; 
    ... 
    } 

    ... 

    Classroom room = new Classroom(); 
    room.Name = "123"; 

Или сделать Name быть static, а также (я сомневаюсь, однако, вы хотите, решение такого рода: это означает, что у вас есть только одинClassroom):

public static class Classroom 
    { 
    // note "static" 
    public static string Name; 
    ... 
    } 

    ... 

    Classroom.Name = "123";