大峡-华山论剑

一心一意做技术

原创 为何C#属性名称的首字母要大写收藏

新一篇: 基于.Net平台的extjs单用户Blog系统 | 旧一篇: Ext服务器交互技术详解(一)

  最近因工作需要参与了一个.Net小 项目,语言使用C#,虽然这语言很多地方来源于Java,然而搞Java久了来搞C#还真有一点不习惯,其中一个最不习惯的是C#中的属性首字母大小。比如:

public class Topic {

 
private Long id;

 
private String title; 

 
private String content;
 
private String intro;

 
private TopicCategory category;

 
private List<TopicComment> comments = new java.util.ArrayList<TopicComment>();
 
private Date inputTime = new Date();
 
private Integer readTimes = 0;

//然后下面是getter及setter方法

}



而C#的版本

  public class Topic
    
{
        
private long id;

        
        
private string title;
      

        
private string content;
        
        
private string intro;
        

        
private TopicCategory category;
        

        
private IList<TopicComment> comments = new List<TopicComment>();

       
private DateTime inputTime = DateTime.Now;
       
        
private int readTimes = 0;
       
public virtual long Id
        
{
            
get return id; }
            
set { id = value; }
        }

       
public virtual string Title
        
{
            
get return title; }
            
set { title = value; }
        }

       
public virtual string Content
        
{
            
get return content; }
            
set { content = value; }
        }

       
public virtual string Intro
        
{
            
get return intro; }
            
set { intro = value; }
        }

       
public virtual TopicCategory Category
        
{
            
get return category; }
            
set { category = value; }
        }

       
public virtual IList<TopicComment> Comments
        
{
            
get return comments; }
            
set { comments = value; }
        }

       
public virtual DateTime InputTime
        
{
            
get return inputTime; }
            
set { inputTime = value; }
        }

       
public virtual int ReadTimes
        
{
            
get return readTimes; }
            
set { readTimes = value; }
        }

    }


   在表示层中直接使用Topic对象的属性,用java的话直接写成topic.title、topic.category等,而用C#则属性默认为Pascal,全部必须写为topic.Title、topic.Category等。由于该系统是一个Ajax应用,因此可想而知如果是做移植的话,客户端要移植多少的代码才行。而且我发现像JavaScript、Php及其它动态语言这些的属性推荐的也是使用Camel–Pascal,即与java一样。语言用多了,有点感觉.Net是在故意搞自己的一套啊,有点不遵守大小的规矩。

  比如C#中的bool类型,当输出成字符串的时候,布尔真默认输出为True,也是首字母大小。而我们知道javascript中的布尔常量为true,由于大小写是有区别的,写成True则问题就严重了。如果要把一个对象转换成JSON,你还得想办法让bool值首字母小写,很麻烦啊。

  发现.Net一直在吸引整合其它平台的设计思想、理念乃至产品等,然而如果什么都搞一套自己的,这样在以后会不会是大问题呢?

 

发表于 @ 2008年04月15日 11:08:00|评论(loading...)|编辑

新一篇: 基于.Net平台的extjs单用户Blog系统 | 旧一篇: Ext服务器交互技术详解(一)

评论

#caikanxp 发表于2008-04-15 13:13:34  IP: 60.190.149.*
首字母大些是继承了微软自己产品一贯的编码风格啊,如果你之前搞过VB6的话,相信就不会像这样不解了。
#menxin 发表于2008-04-15 21:52:03  IP: 221.212.112.*
没明白,C#首字母也用不着非要大写呀,另外你的代码写得太罗嗦了

C#可以直接使用属性而不用字段的

public long id {get;set;}
就可以了
#easyjf 发表于2008-04-16 00:31:46  IP: 125.85.161.*
我肯定知道是可以直接小写,我的代码都是用VS重构生成的,但你这样是破坏了类的封装了嘛,类的字段及属性存在的意义何在?C#感觉越来越灵活了,特别是在引入了泛型、var一系列的东西后。我这里想表述的是MS喜欢自己搞一套,不合群。你想想,VS这些默认的的生成都是生成的那样,大家在这种情况都是使用Camel–Pascal,而你此时偏要用Pascal。另外一楼提到VB,VB应该是大小写没关系的吧。
看看http://blog.csdn.net/easyjf/archive/2008/04/15/2294602.aspx这个源码,我们可以作更深入的讨论。
#tongki_8 发表于2008-04-16 09:20:22  IP: 116.1.231.*
呵呵,原来C#还是有生命力的嘛
#badMS 发表于2008-04-16 10:12:50  IP: 116.52.11.*
MS 就喜欢'个性化'.目的就是你以后只会用他的东西.
#java3jk 发表于2008-04-16 10:59:05  IP: 121.34.250.*
get & set
#111 发表于2008-04-16 12:48:04  IP: 220.248.0.*
我喜欢这么写,这样能够区别字段和属性及方法
#guest 发表于2008-04-16 15:27:53  IP: 202.103.49.*
c#没有限制一定要大写吧!自己写的程序不管怎么写都行,只要符合一定规律即可
#menxin 发表于2008-04-20 11:09:30  IP: 221.212.112.*
我的看法.语言是工具,也只是工具,最重要的是能使用他把自己的"设计"体现出来.我是做应用开发的,所以对此并不看重.如果你是研究开发工具的,可能会有不一样的要求.总之,对我来说,C#是个不错的工具,不过哪开不顺手了,换个更好的不就完了.

对我来说:
"prop"+tab+tab+"int"+tab+"id"+enter
这种建立属性的写法肯定比手工建立字段更快速,更重要的是,它更少地影响我的设计思路.当然这种写法并不适用于你需要对字段进行个性化操作的情况.这种改进使我节省了时间,而且使程序可读性更好些.从这一点上看,微软的设计是很关注用户体验的.

可能你的应用方向和我不同,感受当然不同.我只是阐述一下我的看法.
#夕颜 发表于2008-04-22 15:24:50  IP: 221.215.104.*
C#中的属性其实是get 和set方法的合集,按照他的本职来看 首字母不应该大写嘛?
#bingdian37 发表于2008-06-11 16:03:59  IP: 60.216.87.*
c#中,vs自动重构会把【首字母小写的字段】封装为【首字母大写的属性】,要不然不重名了?

很正常,如果你的字段名首字母大写,则会是另外的情况。

如果你想生成小写属性名,首先就不应该有同名的字段,可以使用下划线等命名方法,然后在重构时,改下字段名为小写就好了

至于js的true与c#bool值转字符串后的True,确实需要注意。

毕竟是不同的语言,有不一致性也是可以理解的,说到一致,连同是x86体系结构的amd和intel的cpu的指令集都不一致(专利问题,只能做到x86指令集兼容,多媒体指令集就各玩各的了),想做到不同编程语言的一致性谈何容易。

现在java能够在不同的系统不同的平台上勉强做到跨平台,也是非常不容易的,在虚机上做了多少工作,才把平台差异给屏蔽一些。。。

现在如果要各大语言保持一致,有些不切实际啊,不过可以在通信机制上做到一致
#yangyanrui 发表于2008-07-22 16:46:34  IP: 192.168.5.*
luguo
发表评论  


登录
Csdn Blog version 3.1a
Copyright © 大峡