具有静态属性的静态类

时间:2015-05-30 11:13:08

标签: c# .net

我正在尝试在单个类中收集应用程序中的所有字符串声明,以便在项目范围内轻松修改它们。我可以像这样创建一个Exception on /contact [POST] Traceback (most recent call last): File "/base/data/home/apps/s~smart-cove-95709/1.384663697853252774/lib/flask/app.py", line 1817, in wsgi_app response = self.full_dispatch_request() File "/base/data/home/apps/s~smart-cove-95709/1.384663697853252774/lib/flask/app.py", line 1477, in full_dispatch_request rv = self.handle_user_exception(e) File "/base/data/home/apps/s~smart-cove-95709/1.384663697853252774/lib/flask/app.py", line 1381, in handle_user_exception reraise(exc_type, exc_value, tb) File "/base/data/home/apps/s~smart-cove-95709/1.384663697853252774/lib/flask/app.py", line 1475, in full_dispatch_request rv = self.dispatch_request() File "/base/data/home/apps/s~smart-cove-95709/1.384663697853252774/lib/flask/app.py", line 1461, in dispatch_request return self.view_functions[rule.endpoint](**req.view_args) File "/base/data/home/apps/s~smart-cove-95709/1.384663697853252774/main.py", line 50, in contact mail.send(msg) File "/base/data/home/apps/s~smart-cove-95709/1.384663697853252774/lib/flask_mail.py", line 491, in send with self.connect() as connection: File "/base/data/home/apps/s~smart-cove-95709/1.384663697853252774/lib/flask_mail.py", line 144, in __enter__ self.host = self.configure_host() File "/base/data/home/apps/s~smart-cove-95709/1.384663697853252774/lib/flask_mail.py", line 156, in configure_host host = smtplib.SMTP_SSL(self.mail.server, self.mail.port) AttributeError: 'module' object has no attribute 'SMTP_SSL' 类:

Strings

或者像这样:

public static class Strings
{
    public static readonly string Title = "App Title";
}

该类应该是静态的,并且所有属性都是常量。 public static class Strings { public const string Title = "App Title"; } 的属性是否包含Stringsstatic readonly个关键字会有什么不同?

1 个答案:

答案 0 :(得分:2)

您可以通过一个简单的例子来看看差异:

void Main()
{
    var f = F.Foo;
    var b = F.Bar;
}

public class F
{
    public const string Foo = "F";
    public static readonly string Bar = "B";
}

将产生以下IL:

IL_0001:  ldstr       "F"
IL_0006:  stloc.0     // f
IL_0007:  ldsfld      UserQuery+F.Bar
IL_000C:  stloc.1     // b
IL_000D:  ret   

const的{​​{1}}值是"烘焙"在编译到调用站点时,这就是为什么你看到值Foo" F"本身,ldstr字段发出static,在运行时加载字段,然后将其分配给局部变量ldsfld

创建bstatic字段是编译时错误。 constconst都是在类型上定义的,而不是实例。更重要的是,可以在运行时设置static字段,而在编译时必须知道static

如果你想设置一堆在运行时不会改变的常量值,那么使用const应该没问题。但是你必须记住,如果你改变一个const值,它不足以编译持有consts的源,那么你必须重新编译那些消耗{{1}的人。同样。