我想定义一个存储两个参数的变量 - 用户名和访问级别。为了做到这一点,我选择使用我在App.cs文件中声明的结构,以及我在成功授权时填写的结构类型的变量。
以下是一些代码示例:
struct AuthSession
{
string username;
string accessLevel;
}
public AuthSession userSession;
重要!必须可以从/向所有类访问变量userSession
,以便能够在每次我需要的每个地方检查用户会话。
我的问题是:
我应该在结构定义中输入private
/ public
吗?例如。 public struct AuthSession
与struct AuthSession
。
如果我没有在结构定义中键入private
/ public
,它是否默认设置了一些封装级别?
答案 0 :(得分:3)
默认情况下,如果未在顶级类/结构上指定可见性修饰符,则会将其视为internal
。嵌套的class / struct默认为private。
struct AuthSession
表示内部,即仅在声明它的程序集内可见。 public struct AuthSession
表示公共,也可以从其他集会访问。请注意,这与结构字段(username
和accessLevel
)不同。如果您没有为它们指定可见性修饰符,则它们为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的值,不结构。
那真的想要你吗?