定义私有/公共类型的结构

时间:2011-02-05 17:46:53

标签: c# struct

我想定义一个存储两个参数的变量 - 用户名和访问级别。为了做到这一点,我选择使用我在App.cs文件中声明的结构,以及我在成功授权时填写的结构类型的变量。

以下是一些代码示例:

struct AuthSession
{
    string username;
    string accessLevel;
}

public AuthSession userSession;

重要!必须可以从/向所有类访问变量userSession,以便能够在每次我需要的每个地方检查用户会话。

我的问题是:

  1. 我应该在结构定义中输入private / public吗?例如。 public struct AuthSessionstruct AuthSession

  2. 如果我没有在结构定义中键入private / public,它是否默认设置了一些封装级别?

2 个答案:

答案 0 :(得分:3)

默认情况下,如果未在顶级类/结构上指定可见性修饰符,则会将其视为internal。嵌套的class / struct默认为private。

  • struct AuthSession表示内部,即仅在声明它的程序集内可见。
  • public struct AuthSession表示公共,也可以从其他集会访问。

请注意,这与结构字段(usernameaccessLevel)不同。如果您没有为它们指定可见性修饰符,则它们为private

答案 1 :(得分:2)

确定你想要一个结构吗?如果你想在结构中存储状态并传递它并用值填充它,你可能会对行为感到惊讶。我建议改用一个班级。

考虑以下示例:

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的值,结构。

真的想要你吗?