我正在尝试在单个类中收集应用程序中的所有字符串声明,以便在项目范围内轻松修改它们。我可以像这样创建一个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";
}
的属性是否包含Strings
或static readonly
个关键字会有什么不同?
答案 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
。
创建b
和static
字段是编译时错误。 const
和const
都是在类型上定义的,而不是实例。更重要的是,可以在运行时设置static
字段,而在编译时必须知道static
。
如果你想设置一堆在运行时不会改变的常量值,那么使用const
应该没问题。但是你必须记住,如果你改变一个const
值,它不足以编译持有consts的源,那么你必须重新编译那些消耗{{1}的人。同样。