一不留神,自己就会变成老土了

来源:互联网 发布:网络传销为什么没人管 编辑:程序博客网 时间:2024/04/30 18:22

这两天在程序中实现一个动态创建HTML的功能类,发现公司一个小伙子写的如下的一个类:

public class UIHtml
    {
        public UIHtml() { }
        public UIHtml(string ObjectName,TBHtmlViewType ViewType, string MD5)
        {
           this.ObjectName = ObjectName;
           this.ViewType = ViewType;
            this.MD5 =MD5;
        }

        public string ObjectName {get;  set; }

        public TBHtmlViewType ViewType {get;  set; }

        public string MD5 { get;  set;}

        public override string ToString()
        {
            returnObjectName + "_" + ViewType.ToString();
        }


    }

感觉比较奇怪,这样的类能够工作吗?这个问题问得有点多余,因为这个类工作的很好,已经工作了很长时间了。我的印象中C#类的属性必须有一个对应的private 字段才可以,这样的类定义中,所有的属性都没有字段,还可以工作,我肯定是落伍了,于是查了查MSDN2010,发现了如下的内容:



在C# 3.0 和更高版本中,当属性的访问器中不需要其他逻辑时,自动实现的属性可使属性声明更加简洁。客户端代码还可通过这些属性创建对象。如下面的示例所示声明属性时,编译器将创建一个私有的匿名支持字段,该字段只能通过属性的get 和 set 访问器进行访问。

示例


下面的示例演示了一个具有某些自动实现的属性的简单类:

C#

复制

// This class is mutable. Its data can bemodified from

// outside the class.

class Customer

{

    // Auto-Impl Properties for trivial get andset

    public double TotalPurchases { get; set; }

    public string Name { get; set; }

    public int CustomerID { get; set; }

 

    // Constructor

    public Customer(double purchases, string name,int ID)

    {

       TotalPurchases = purchases;

       Name = name;

       CustomerID = ID;

    }

    // Methods

    public string GetContactInfo() {return "ContactInfo";}

    public string GetTransactionHistory() {return "History";}

 

    // .. Additional methods, events, etc.

}

 

class Program

{

    static void Main()

    {

       // Intialize a newobject.

       Customer cust1 = new Customer ( 4987.63, "Northwind",90108 );

 

       //Modify a property

       cust1.TotalPurchases += 499.99;

    }

}

 

 

前面示例中所示的类是可变的。客户端代码可在对象创建后更改对象中的值。在包含大量行为(方法)以及数据的复杂类中,通常需要有公共属性。但是,对于仅封装一组值(数据)且只有极少行为或没有行为的较小类或结构,建议将 set 访问器声明为private 以使对象不可变。有关更多信息,请参见如何:使用自动实现的属性实现轻量类(C# 编程指南)。

可以在自动实现的属性上使用特性,但由于特性不可从源代码访问,显然不能用在支持字段上。如果您必须在属性的后备字段上使用特性,则应该只创建常规属性。



我很早接触.net,从1.0就开始了,所以很多东西在我的印象中根深蒂固,这种语言的新特性,最近没有关注,结果落伍了,老土了。真的要当心,新的技术,新的环境,变化太快了。一不留神,就老土了。

 


原创粉丝点击