Определить частный / публичный тип структуры - PullRequest
1 голос
/ 05 февраля 2011

Я хочу определить переменную, которая будет хранить два параметра - имя пользователя и уровень доступа. Чтобы сделать это, я решил использовать структуру, которую я объявляю в файле App.cs и переменную из типа этой структуры, которую я заполняю при успешной авторизации.

Вот пример кода:

struct AuthSession
{
    string username;
    string accessLevel;
}

public AuthSession userSession;

Внимание! Переменная userSession должна быть доступна из / для всех классов, чтобы обеспечить возможность проверять сеанс пользователя каждый раз и в каждом нужном мне месте.

Мои вопросы:

  1. Должен ли я ввести private / public в определении структуры? Например. public struct AuthSession против struct AuthSession.

  2. Если я не наберу private / public в определении структуры, будет ли установлен по умолчанию какой-либо уровень инкапсуляции?

Ответы [ 2 ]

3 голосов
/ 05 февраля 2011

По умолчанию, если вы не указываете модификатор видимости для класса / структуры верхнего уровня, он считается internal.Для вложенного класса / структуры по умолчанию установлено значение private.

  • struct AuthSession означает внутренний, т.е. видимый только внутри сборки, в которой он объявлен.
  • public struct AuthSession означает общедоступный, то есть доступный также для других сборок.

Обратите внимание, что это не совпадает с полями структуры (username и accessLevel).Если вы не укажете для них модификатор видимости, это private.

2 голосов
/ 05 февраля 2011

Вы уверены, хотите структуру?Если вы хотите сохранить состояние в структуре, передать его и заполнить значениями, вы можете быть удивлены поведением.Вместо этого я бы предложил использовать класс.

Рассмотрим следующий пример:

class Program
    {
        struct AuthSession
        {
            public string username;
            public string accessLevel;
        }

        class AuthSession2
        {
            public string Username { get; set; }
            public string AccessLevel { get; set; }
        }

        static void Main(string[] args)
        {
            AuthSession session = new AuthSession();
            AuthSession2 session2 = new AuthSession2();

            DoStuff(session);
            DoStuff(session2);

            Console.WriteLine(session.username + " " + session.accessLevel);
            Console.WriteLine(session2.Username + " " + session2.AccessLevel);
        }

        static void DoStuff(AuthSession session)
        {
            session.username = "a";
            session.accessLevel = "a";
        }

        static void DoStuff(AuthSession2 session)
        {
            session.Username = "a";
            session.AccessLevel = "a";
        }
    }

Обратите внимание, что при запуске этого примера метод Main будет иметь значения только для класса AuthSession2, не структура.

Это действительно хотите, чтобы вы хотели?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...