c#自动属性

1.自动属性,微软提供的语法糖

在VS中键入“prop”连按两次“Tab”,自动生成

// Auto-implemented properties for trivial get and set
    public double TotalPurchases { get; set; }
    public string Name { get; set; }
    public int CustomerID { get; set; }

当你声明以下示例中所示的属性时,编译器将创建仅可以通过该属性的 get 和 set 访问器访问的专用、匿名支持字段。

优点:减少代码量

缺点:属性定义时不能做其他逻辑判断

 

2.传统属性的定义

键入“propfull”连按两次“Tab”,自动生成,再修改变量名和属性名

private double TotalPurchases;
public double TotalPurchases
{
    get{return TotalPurchases;}
    set{
if((1000<value)&&(value<2000))
{

TotalPurchases=value;
   }
   }
}

优点:可做逻辑判断

缺点:繁琐,代码多

 

3.区别(转自https://blog.csdn.net/fjh19950514/article/details/78303949

(1)自动实现的属性必须同时声明 get和 set 访问器。创建 readonly自动实现属性时,需要将set访问器设置为private 。

(2)自动实现的属性上可以使用特性,不能用在支持后备字段上。如果属性的后备字段上使用特性,则应该只创建常规属性。

(3)自动实现属性get,和set中不能包含特殊的逻辑处理。与字段类似,但不同于字段。与字段不同,属性不作为变量来分类,不能将属性作为 ref参数或 out参数传递。

注意:在接口中声明属性而不定义主体,请使用访问器声明属性,访问器必须由实现该接口的每个类型实现。(转自:https://www.cnblogs.com/weihengblogs/p/9228017.html

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

 

namespace 接口属性
{
//定义接口
interface ISeries //interface接口关键字,ISeries接口名称
{
 //定义接口属性
 int next
 {
 get;
 set;
 }
}

//创建一个Numble类,实现ISeries接口
class Numble : ISeries
{
 int val;
 public Numble()
 {
 val = 0;
}

//实现属性
public int next
{
 get
 {
 val += 2;
 return val;
}
set
{
 val = value;
}
}
}
class Program
{
 public void Run()
 {
 Numble num = new Numble();
 //访问接口属性
 for(int i=0;i<5;i++)
 Console.WriteLine("Next Value is "+num.next);
}
static void Main(string[] args)
{
 Program p=new Program();
 Numble num = new Numble();
 p.Run(); //这里展示了如何调用类自身的函数,先new一个Program(),然后再调用

 Console.WriteLine("Starting at 21");
 num.next = 21;
 for (int i = 0; i < 5; i++)
 Console.WriteLine("Next Value is " + num.next);

 Console.ReadLine();
 }
}
}

 

 

参考文章:

https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/classes-and-structs/auto-implemented-properties

https://www.cnblogs.com/peterYong/p/6556712.html

https://blog.csdn.net/fjh19950514/article/details/78303949

c#自动属性

上一篇:C#如何MeasureString、Graphics获取字符串的像素长度


下一篇:WinCMD Regsvr32