NET中的命名规范,中的命名真累人
分类:多线程

ASP.NET 的命名准绳与往常的本领略有不相同,但意识 ASP.NET 中各种本事在命名方面都没有统风流倜傥的正规化,实乃疲劳。

近期看大器晚成篇好文章,摘抄下来。 原作出处:   @Page指令坐落于每一个ASP.NET页面的最上部,告诉ASP.NET那么些具体页面使用什么性质,以致该页面世襲的顾客控件。ASP.NET页面@Page指令属性有:AspCompat、Async、Async提姆eout、Auto伊夫ntWireup、Buffer、ClassName、ClientIDMode、CodeBehind、 CodeFile、CodeFileBaseClass、CodePage、CompilationMode 、ContentType、 CompilerOptions、Culture 、Debug、 Enable伊芙ntValidation、EnableSessionState、EnableTheming 、EnableViewState、 EnableViewStateMac 、ErrorPage 、Explicit、 Inherits、 Language、 LCID 、LinePragmas、MaintainScrollPositionOnPostback、 MasterPageFile、 MetaDescription 、MetaKeywords 、ResponseEncoding、Src、Strict、StylesheetTheme、Theme、Title、Trace 、TraceMode 、Transaction 、UICulture、 ValidateRequest、ViewStateEncryptionMode、ViewStateMode、WarningLevel。 AspCompat通过安装页面在单线程单元中运作,使得ASP.NET页面能够访谈古板的COM对象。ASP.NET页面默许是在三十二线程单元(MTA卡塔尔(قطر‎中运作。当启用AspCompant形式时,设置ASP.NET在单线程单元(STA)中运行页面,以便它亦可平安地与COM对象人机联作。AspCompat设置为true会影响属性。默以为false。 Async使页面成为异步管理程序,即招致页使用IHttpAsyncHandler的完结来管理诉求,默以为false。 AsyncTimeout概念在管理异步任务时采用的晚点的光阴间距(以秒为单位)。默觉得45秒。 AutoEventWireup指令页面包车型地铁平地风波是还是不是自动绑定。假如启用了事件的活动绑定,则为true;不然为false。暗中认可值为true。 Buffer规定是否启用HTTP响应缓冲。倘诺启用页面缓冲为true;不然为false。默以为true。 ClassName点名在央求该页面时将机关进行动态编写翻译的页的类名。此值能够是其它有效的类名,何况能够归纳类的意气风发体化命名空间。假使未钦定该属性的值,则已编写翻译的类主力基于页的公文名。别的页能够因而选取@ Reference 指令来征引分配给第风流倜傥页的类名。 ClientTarget指令 ASP.NET 服务器控件应为其变现内容的对象客商代理(常常是 Web 浏览器,举例Microsoft Internet Explorer)。该值能够是应用程序配置文件的 <clientTarget> 节中定义的任何有效小名。 CodeBehind钦命包涵与页关联的类的已编写翻译文件的名称。该属性无法在运营时采纳。提供此属性是为着与以前版本的 ASP.NET 的极其,以促成代码隐讳效率。在 ASP.NET 2.0 版中,应改用 CodeFile 属性内定该源文件的称呼,同期利用 Inherits 属性钦命该类的通通限制名称。 CodeFile点名指向页援用的代码隐敝文件的不二等秘书籍。此属性与 Inherits 属性一同行使能够将代码隐敝源文件与网页相关联。此属性仅对编写翻译的页有效。 CodeFileBaseClass钦赐页的基类及其涉及的代码遮盖类的门道。此属性是可选的,但黄金年代旦应用此属性,则必得同期利用 CodeFile 属性。如若愿意达成以下分享方案,可使用该属性:在该分享方案中,您在基类中定义通用字段(能够选取性地定义关联事件)以援引在网页中扬言的控件。出于 ASP.NET 代码生成模型的因由,若是您在基类中定义字段时未尝运用该属性,则编写翻译时将为在网页中(在单独的总局类存根中)评释的控件生成新的分子定义,而你希望的方案将无法生效。不过,要是您使用 CodeFileBaseClass 属性将基类与页相关联,何况您的根据地类(其名目分配给 Inherits 属性,並且其源文件由 CodeFile 属性引用)是从该基类世袭的,则该基类中的字段在代码生成之后将能够援引页上的控件。 CodePage提醒用于响应的编码方案的值。该值是二个用作编码方案 ID 的平头。有关或许的 CodePage ID 的列表,请参见 Encoding 类。 CompilationMode安装是还是不是应使用钦赐两个枚举选项之后生可畏的字符串来编写翻译页。私下认可值为 Always,由此,暗许情形下编写翻译 .aspx 页。包罗用于编写翻译页的编写翻译器选项的字符串。在 C# 和 Visual Basic 中,那是编写翻译器命令行按钮的行列。有关编写翻译器选项的越多消息,请参见 C# 编写翻译器选项或 Visual Basic 编译器。 ContentType将响应的 HTTP 内容类型定义为正规的 MIME 类型。 CompilerOptions支撑任何有效的 HTTP 内容类型字符串。有关也许值的列表,请在 MSDN Library 中寻觅MIME。Culture提示页的区域性设置。该属性的值必得是行得通的区域性 ID。注意,LCID 和 Culture 属性是并行排挤的;假如运用了此中贰天性质,就不可能在长期以来页中应用另两个属性。 Culture动态变化的类将设置此属性的值。其它,还足以经过编制程序形式或在 Web.config 文件的 globalization 成分(ASP.NET 设置结构) 中显式设置 Culture 属性的值。Culture 属性用于扶助当地化页内容。能够将其安装为别的有效的区域性 ID。举个例子,en-us 区域性 ID 将页设置为美利坚合众国爱尔兰语,而 fr 区域性 ID 将页设置为英语。还足以将该值设置为 auto,进而自动物检疫查实验浏览器的首要推荐语言并设置该语言。能够用暗许值(如 auto:en-us)节制自动语言检查评定。 Debug指令是还是不是应使用调节和测量试验符号编写翻译该页。如若应利用调节和测量试验符号编写翻译该页,则为 true;否则为 false。由于此设置影响属性,因而只应在支付时期将此属性设置为 true。 EnableEventValidation在回发方案中启用事件表达。若是表明事件,则为 true;不然为 false。私下认可值为 true。 EnableSessionState定义页的对话状态要求。若是启用了对话状态,则为 true;若是得以读取会话状态但不能够开展转移,则为 ReadOnly;不然为 false。私下认可值为 true。这几个值是不区分朗朗上口写的。 EnableTheming指令是或不是在页上使用宗旨。假若接受主旨,则为 true;不然为 false。暗中同意值为 true。 EnableViewState指令是还是不是在页央求之间保持视图状态。倘若要维持视图状态,则为 true;不然为 false。暗中认可值为 true。 EnableViewStateMac指令当页从客商端回发时,ASP.NET 是还是不是合宜对页的视图状态运营Computer身份验证检查 (MAC卡塔尔国。如若应该对视图状态运转 MAC 检查,则为 true;否则为 false。暗中同意值为 false。视图状态 MAC 是潜伏变量的加密版本,当某页被发送到浏览器时,该页的视图状态恒久保持到该变量中。当您将此属性设置为 true 时,将检查加密的视图状态以证实它在顾客端未被歪曲。注意,将此属性设置为 true 会影响属性,因为在页的历次往返路程中,都不得不加密和平解决密变量值。 ErrorPage概念在现身未管理页至极时用于重定向的对象 UGL450L。 Explicit鲜明是或不是使用 Visual Basic Option Explicit 情势来编译页。假使启用了 Visual Basic 显式编译选项,且持有变量必需接纳Dim、Private、Public 或 ReDim 语句来声称,则为 true;否则为 false。暗许值为 false。除了 Visual Basic,全部其余语言都忽略该属性。别的,该选取在 Machine.config 配置文件中被安装为 true。 Inherits定义供页继承的代码隐瞒类。它能够是从 Page 类派生的其余类。它与 CodeFile 属性(满含指向代码掩盖类的源文件的门路)一齐使用。 Language点名在对页中的全部内联突显(<% %> 和 <%= %>)和代码评释块举行编写翻译时采纳的语言。值能够表示其他 .NET Framework 支持的言语,包蕴 Visual Basic、C# 或 JScript。每页只好动用和钦定生机勃勃种语言。 LCID定义 Web 窗体页的区域安装标志符。区域安装标志符是二个 三13人值,该值唯豆蔻梢头地定义某些区域安装。除非你使用该属性为 Web 窗体页钦点分化的区域设置,不然 ASP.NET 使用 Web 服务器暗中认可的区域安装。注意,LCID 和 Culture 属性是并行排挤的;假如选用了个中贰天性质,就不可能在相仿页中央银行使另叁性情格。 LinePragmas分明运维库是或不是应在源代码中生成行杂注。那几个是编写翻译器选项,调节和测量试验工具平常选择那些采取来标识源文件中的特定岗位。假设应该生成行杂注,则为 true;不然为 false。 MaintainScrollPositionOnPostback指令在回发后是或不是将客户再次来到到客商端浏览器中的同一职位。若是应该将客商重返到均等地方,则为 true;否则为 false。暗许值为 false。开采人士能够通过安装 Web.config 文件的 <pages> 成分上的 maintainScrollPostitionOnPostback 属性(注意,此属性在配备文件中是分别朗朗上口写的),为具备页定义该属性。 MasterPageFile设置剧情页的母版页或嵌套母版页的门道。援救相对路径和相对路径。 MetaDescription为ASP.NET4.0新扩张为页面的SEO优化,内定在响应的 HTML <Meta> 标识中展现的页的汇报。也能够经过编制程序形式将汇报作为页的质量来做客。 MetaKeywords也是ASP.NET4.0新添的为SEO优化,钦命在响应的 HTML <Meta> 标识中展现的页的Keywords。也足以经过编制程序形式将叙述作为页的天性来会见。 ResponseEncoding指令用于包括页内容的 HTTP 响应的编码方案的称谓。分配给该属性的值是立见功能的编码名称。有关恐怕的编码名称的列表,请参见 Encoding 类。您也足以调用 GetEncodings 方法来获得恐怕的编码名称和 ID 的列表。 Src点名包蕴链接到页的代码的源文件的不二秘技。在链接的源文件中,可以筛选将页的编制程序逻辑包涵在类中或代码表明块中。能够应用 Src 属性将转移提供程序链接到页。有关更加多音讯,请参见 BuildProvider 类。别的,在低于 2.0 版的 ASP.NET 中,Src 属性是另生机勃勃种将代码蒙蔽文件链接到页的办法。在 ASP.NET 2.0 中,将代码隐敝源文件链接到页的首要推荐办法是运用 Inherits 属性来钦点类,并选用 CodeFile 属性来钦赐该类的源文件的门路。 Strict指令应选择 Visual Basic OptionStrict 情势来编写翻译页。如若启用了 Option Strict,则为 true;否则为 false。暗中同意值为 false。除了 Visual Basic,全数其余语言都忽略该属性。 StyleSheetTheme钦赐在页上使用的卓有功效核心标志符。如若设置了 StyleSheetTheme 属性,则单独的控件能够重写主旨中包蕴的体裁设置。那样,大旨得以提供站点的完全外观,同有时常候,利用 StyleSheetTheme 属性中含有的设置能够自定义页及其各样控件的一定设置。 Theme点名在页上使用的立竿见影大旨标记符。假设设置 Theme 属性时髦未应用 StyleSheetTheme 属性,则将重写控件上的独门的样式设置,允许你创设统一而肖似的页外观。 Title内定在响应的 HTML <title> 标志中显现的页的标题。也足以经过编制程序格局将标题作为页的本性来拜访。 Trace指令是还是不是启用追踪。如若启用了追踪,则为 true;不然为 false。私下认可值为 false。 TraceMode指令当启用追踪时如何为页突显跟踪音信。可能的值为 SortByTime 和 SortByCategory。当启用追踪时,暗许值为 SortByTime。 Transaction指令在页上是还是不是扶持职业。也许的值有 Disabled、NotSupported、Supported、Required 和 RequiresNew。暗中同意值为 Disabled。 UICulture点名用于页的顾客分界面 (UI卡塔尔区域性设置。辅助其余有效的 UI 区域性值。 ValidateRequest指令是还是不是应发生供给验证。假如为 true,哀告验证将依据全体神秘危急的值的硬编码列表检查有着输入数据。如若现身相称情状,将引发 HttpRequestValidationException 极度。默许值为 true。该功效在计算机配置文件 (Machine.configState of Qatar中启用。能够在应用程序配置文件 (Web.config卡塔尔国 中或在页军长该属性设置为 false 来禁止使用该意义。该意义推进减少对简易页或 ASP.NET 应用程序进行跨站点脚本攻击的高风险。假设应用程序无法科学验证顾客输入,则恐怕会直面几体系型的格式错误的输入的大张征伐,包涵跨站点脚本攻击和 Microsoft SQL Server 注入式攻击。应该留神地评估应用程序中负有方式的输入,并保险对它们进行了理所必然地印证和编码,也许保障应用程序在管理数量或将消息发送回客商端之前已脱离。除此而外,别无它法。 ViewStateEncryptionMode使用七个大概的枚举值来显著怎么样加密视图状态:Auto、Always 或 Never。暗中认可值为 Auto,表示只要单个控件央求进行加密,将加密视图状态。 ViewStateMode以此脾气能够独立设置控件的视图状态。在那前版本的 ASP.NET 中,控件的视图唯有在 Page 的 ViewState 启用的前提下才得以独立主宰。在 ASP.NET4.0 中,控件的视图状态能够独自设置了,也等于说,即便页面的视图状态未有启用,控件依旧得以启用视图状态。 ViewStateMode 属性是个枚举值:InheritL:视图状态从父控件世襲;Enabled:固然父控件的视图状态并未有启用,也启用该控件的视图状态;Disabled:即便父控件的视图状态启用了,也禁用此控件的视图状态。 WarningLevel指令您愿意编写翻译器将警示视为错误(进而中止对页实行编写翻译)的编写翻译器警示等第。大概的警戒等级为 0 到 4。有关愈来愈多新闻,请参见 WarningLevel 属性。

多年来将叁个品类从ASP.NET MVC 3进级至刚刚宣告的ASP.NET MVC 5.1,升级后发觉三个ajax哀告现身了500不当,日志中著录的详尽格外消息如下:

1.关键字

以 StyleSheetTheme 为例:

图片 1

C#概念了有的主要字(public/static/void/class/int/string卡塔尔国,这一个首要字是组成C#骨干语法用的。

  • 在 C# 中为 StyleSheetTheme,大小写敏感;
  • 在 web.config 中为 styleSheetTheme,大小写敏感。
  • 在 @Page 指令中为 StylesheetTheme,忽视大小写;
System.ArgumentException: 已添加了具有相同键的项。(An item with the same key has already been added)
   在 System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
   在 System.Web.Mvc.JsonValueProviderFactory.AddToBackingStore(EntryLimitedDictionary backingStore, String prefix, Object value)
   在 System.Web.Mvc.JsonValueProviderFactory.AddToBackingStore(EntryLimitedDictionary backingStore, String prefix, Object value)
   在 System.Web.Mvc.JsonValueProviderFactory.GetValueProvider(ControllerContext controllerContext)
   在 System.Web.Mvc.ValueProviderFactoryCollection.GetValueProvider(ControllerContext controllerContext)
   在 System.Web.Mvc.ControllerBase.get_ValueProvider()
   在 System.Web.Mvc.ControllerActionInvoker.GetParameterValue(ControllerContext controllerContext, ParameterDescriptor parameterDescriptor)
   在 System.Web.Mvc.ControllerActionInvoker.GetParameterValues(ControllerContext controllerContext, ActionDescriptor actionDescriptor)
   在 System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass21.<BeginInvokeAction>b__19(AsyncCallback asyncCallback, Object asyncState)
   在 System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.Begin(AsyncCallback callback, Object state, Int32 timeout)
   在 System.Web.Mvc.Async.AsyncResultWrapper.Begin[TResult](AsyncCallback callback, Object state, BeginInvokeDelegate beginDelegate, EndInvokeDelegate`1 endDelegate, Object tag, Int32 timeout)
   在 System.Web.Mvc.Async.AsyncControllerActionInvoker.BeginInvokeAction(ControllerContext controllerContext, String actionName, AsyncCallback callback, Object state)

VS霁深紫字的才是非同一般字。

StyleSheetTheme 是 C# 中的贰个属性,C# 中属性大写初叶,所以那边是符合标准的。

图片 2

Main、String、Console等这几个都不是主要字。而只是.NET类库提供的有的方法,属性等。。。理论上讲,假设您不援引这几个库,就从不这么些东东。

web.config 中属性名称以小写起来,所以 styleSheetTheme 在 web.config 中也是相符规范的。

虽说难点是出于进级至MVC 5.1挑起的,但针对“遇到题目,先质疑本身”的条件,检查了一下代码,竟然在js代码中窥见了一个设有已久的最少错误:

2.标识符

可是 StylesheetTheme 为何要把 Sheet 的 S 小写吧,真是令人费解,幸好这里是忽略大小写的。

图片 3

标记符是用来给类、方法、变量等命名用的。

在 ASP.NET 中山高校小写不正规的还不菲,比如:ID 与 Id,Width 与 width,还真令人搞不懂。

var pagingBuider = { "PageIndex": 1 };
function buildPaging(pageIndex) {
    pagingBuider.pageIndex = pageIndex;
    $.ajax({
        data: JSON.stringify(pagingBuider),
        contentType: 'application/json; charset=utf-8'
    });
}

命名准绳(法律等第,不坚守就报错):

说明

图片 4

                1)由字母、中文(不推荐)、数字、下划线 组成;

上述 ASP.NET 中的命名是指 Visual Web Developer 二〇〇五给出的暗中认可命名。

PageIndex在赋值时写成了pageIndex(第二个字母大写P写成了小写p),在js中开头字母小写也是行业内部写法,那时也许是直觉性地写出来的,所以这么些低档错误未可厚非。

                2)不能够以数字起头;

/*那会儿你也许不禁要问:为何本身给和睦找事,先导字母用大写呢?哎,笔者也可能有自家的苦衷,这段js代码是在服务端依据C#目的的习性生成的,C#的正规是早先字母大写*/

                3)不可能是重要字。

鉴于那样三个初级错误,在ajax央浼时发送给服务端的json字符串变成了如此:

                4)C#言语是高低写敏感的:demo和德姆o是多少个东西;

{"PageIndex":1,"pageIndex":2}

行当规范(道德自律,不遵守大概挨骂,但不会报错)

此时找茬的兴头风流倜傥涌而出,叁个大大的问号浮今后后面。。。

                1)驼峰命名法:每一个单词第一个字母大写。

图片 5

                2)方法名、类名、属性名、  每一种单词首字母大写。

 

                3)字段名、变量名     第一个单词首字符小写,前面假如还大概有单词才大写。

为啥ASP.NET MVC 3能包容那一个错误,並且得到不错的值(PageIndex=2),而ASP.NET MVC 5.1却不能够啊?是MVC 5.1更加小心了或许心胸更狭窄了?

                4)字段名,(极度在实业类中)以"_”早前,首字母小写。  比方_className

好奇心的促使下,尝试在ASP.NET MVC的开源代码中风度翩翩探究竟。

                5)接口名,一般以"I"开头,有时以“able”结尾。

  • 用git签出ASP.NET MVC的源代码——
  • 用VS二〇一一张开解决方案,在缓慢解决方案微处理机中寻觅到JsonValueProviderFactory

在AddToBackingStore方法中找到了老大的引发点(最终1行代码 backingStore.Add(prefix, value卡塔尔(قطر‎):

图片 6

private static void AddToBackingStore(EntryLimitedDictionary backingStore, string prefix, object value)
{
    IDictionary<string, object> d = value as IDictionary<string, object>;
    if (d != null)
    {
        foreach (KeyValuePair<string, object> entry in d)
        {
            AddToBackingStore(backingStore, MakePropertyKey(prefix, entry.Key), entry.Value);
        }
        return;
    }

    IList l = value as IList;
    if (l != null)
    {
        for (int i = 0; i < l.Count; i++)
        {
            AddToBackingStore(backingStore, MakeArrayKey(prefix, i), l[i]);
        }
        return;
    }

    // primitive
    backingStore.Add(prefix, value);
}

图片 7

一发追踪下去,找到了诱惑那么些的切实代码行:

_innerDictionary.Add(key, value);

_innerDictionary在运营时的对应达成是:

new Dictionary<string, object>(StringComparer.OrdinalIgnoreCase);

在Dictionary的构造函数中特意使用了StringComparer.OrdinalIgnoreCase(也等于key不区分轻重缓急写),可知微软技术员思量到了“大小写写错”的动静,但是未有设想到“精确与不当的大小写都冒出”的景色。

当MVC 5.1收受到 {"PageIndex":1,"pageIndex":2} 的json字符串,在试行如下操作时:

_innerDictionary.Add("PageIndex", 1);
_innerDictionary.Add("pageIndex", 2);

引爆了那叁个:

System.ArgumentException: 已添加了具有相同键的项。(An item with the same key has already been added)。

修补这一个主题素材很简单:

图片 8

if (_innerDictionary.ContainsKey(key))
{
    _innerDictionary[key] = value;
}
else
{
    _innerDictionary.Add(key, value);
}

图片 9

是微软技术员没考虑到依然有怎么着非常构思?

只是,留神看了一下JsonValueProviderFactory的实今世码令人感到答案更只怕是前面叁个,比如上边包车型地铁代码:

图片 10

private static object GetDeserializedObject(ControllerContext controllerContext)
{
    if (!controllerContext.HttpContext.Request.ContentType.StartsWith("application/json", StringComparison.OrdinalIgnoreCase))
    {
        // not JSON request
        return null;
    }

    StreamReader reader = new StreamReader(controllerContext.HttpContext.Request.InputStream);
    string bodyText = reader.ReadToEnd();
    if (String.IsNullOrEmpty(bodyText))
    {
        // no JSON data
        return null;
    }

    JavaScriptSerializer serializer = new JavaScriptSerializer();
    object jsonData = serializer.DeserializeObject(bodyText);
    return jsonData;
}

图片 11

StreadReader竟然不开展Dispose(比如位于using中),那不疑似出自两个名特别促销技师之手。

本文由10bet手机官网发布于多线程,转载请注明出处:NET中的命名规范,中的命名真累人

上一篇:主题和皮肤 下一篇:没有了
猜你喜欢
热门排行
精彩图文