我想知道什么被认为是C#最佳实践,私人/受保护的成员与公共吸气者,或公共吸气者与私人/受保护的制定者?
public int PublicGetPrivateSetter
{
get;
private set;
}
Run Code Online (Sandbox Code Playgroud)
private int _privateMember;
public int PublicGetPrivateMember
{
get { return _privateMember; }
}
Run Code Online (Sandbox Code Playgroud)
我觉得在你的代码中使用私有成员更明确它是一个私有的setter(使用命名约定).另一方面,使用私有setter可以选择使用虚拟(受保护),编写更少的代码,减少错误的空间,并且如果需要,可以为您提供添加副作用的选项.
我找不到什么被认为是最佳实践,或者即使一个被认为比另一个更好.从我所看到的通常80%的时间(从我看到的代码)人们不使用私人制定者...我不确定这是因为人们不知道私人制定者,或者因为它是被认为更好地实际使用私人会员.
编辑:
实际上,我在使用私有成员时忘记的其他好处是默认值和readonly的使用.
我正在寻找IIS Express中子域catch-all url的解决方案.
基本上,我环顾四周,找到了如何在IIS Express中创建域/子域.
它很容易找到,我所要做的就是在IIS Express的ApplicationHost.config中添加另一个绑定,并将我的hosts文件更改为127.0.0.1到域.
这是IIS express配置文件:
<binding protocol="http" bindingInformation="*:80:domain.com" />
<binding protocol="http" bindingInformation="*:80:sub.domain.com" />
Run Code Online (Sandbox Code Playgroud)
但是,我找不到任何方法来创建一个包罗万象的URL.在某个地方可能有我的视线过度,我甚至尝试过(也许天真地)*:80:*.domain.com和 *:80:*.
我搜索但无法回答的另一个问题是将IIS表达式完全绑定到一个catch-all网址(例如,每个请求都应通过IIS Express传递给特定端口).
如果重要,我正在使用ASP.NET MVC 3应用程序.
我想知道这里有人能否解释一下我最近关于Razor的一些问题.
1)基本上,我想将部分定义分成多个部分?为什么?因为我想过要.
遗憾地,使用@section"sectionname"两次抛出异常.
深入研究Razor源代码,我看到Razor检查了一个部分是否已经定义,并且如果已经定义了则抛出异常.
由于Razor使用委托来呈现部分,我将代码更改为使用Delegate.Combine(如果之前已经定义了部分),并且它工作正常,我现在能够创建一个声明两次(或更多)的部分.
2)当在视图中定义部分但未在布局页面中呈现时,将抛出异常.我没有看到一个优雅的解决方案来克服这一点.如果我想使用包含多个布局页面的View页面......这是一个问题.
查看源代码(再次),只有一个foreach检查视图中定义的每个部分是否已被渲染,然后如果尚未渲染部分则抛出异常.
我已经想到了一些解决方案(特别是对于我的第二个问题,继承自视图基类并将非呈现的部分暴露给布局页面并进行一些处理),但它们看起来有点像黑客.有没有更好的解决方案然后实际改变来源?
不是很重要,但是如果有人对设计决策有任何见解导致Razor成为这样的话,我也会感激,因为这似乎是一个非常严格的设计.
更新:
@davidferguson和@takepara你错了.我的问题不是在布局中定义一个部分,而是在视图中没有定义它,反之亦然.在视图中定义它但不在布局中定义它.