2015-03-03 6 views
2

Я все еще нахожу свои ноги с C# и задаюсь быстрым вопросом, который прослушивал меня какое-то время.Открытый класс, но переменные частного члена?

Скажем, я пишу класс и определить свойство следующим образом: -

public class Employee 
{ 
    string FirstName {get; set;} 
} 

class Program 
{ 
    private static object GetTheEmployee() 
    { 
     return new Employee{ FirstName = "Joe" } 
    } 
} 

Почему использование FirstName в рамках метода GetTheEmployee недоступны, но при изменении переменной в ПгвЬЫате «строка» в классе Employee к 'public string' вместо этого доступен из класса Program.

Я бы подумал, что если объявить модификатор доступа класса общедоступным, то все переменные внутри класса будут также общедоступными по умолчанию?

+0

Это личное .. –

+0

http://stackoverflow.com/questions/12392876/class-vs-public-class – Jens

+0

По умолчанию (без указания) для членов класса является закрытым. default для класса является внутренним. https://msdn.microsoft.com/en-us/library/ms173121.aspx –

ответ

4

Тот факт, что вы объявили класс как public, не означает, что все члены класса также будут публичными.

По умолчанию члены класса (поля, свойства, методы и т. Д.) Имеют модификатор доступа private, поэтому, если вы явно не объявили свое свойство как public (или защищенным, внутренним и т. Д.), Оно будет закрытым.

+1

Большое спасибо за ваш ответ. Поэтому единственная причина, по которой вы объявляете публикацию класса, заключается в том, что вы можете создать экземпляр объекта класса, но это не значит, что вы можете установить переменные класса? –

+0

@ AngelaMarie-Daley На самом деле класс должен быть общедоступным, если вы хотите создать экземпляр этого класса вне сборки, содержащей его. По умолчанию классы являются внутренними (и могут быть созданы внутри одной сборки). И да, модификаторы доступа членов класса не зависят от модификатора доступа к классу. –

6

Я бы подумал, что если объявить модификатор доступа класса открытым, то все переменные внутри класса будут также общедоступными по умолчанию?

Они не будут. Модификатор доступа по умолчанию для членов класса - private. Если вы хотите сделать их public, вам нужно указать его явно.

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