我定义了两个Public方法:EncapsulateField和EncapsulateAllFields,分别用于为类的一个变量封装属性,或者为类中所有的变量(非静态)封装属性。
使用上面的宏的方法很简单,选择“工具”>“宏”>“宏资源管理器”就可以看到我们已经创建的宏方法,如下图所示:

假如你已经编写了这样一段代码:
using System;
using System.Collections.Generic;
using System.Text;
namespace Demo
{
public class Person
{
private int _id;
private string _name;
private DateTime _birthDay;
}
}
using System.Collections.Generic;
using System.Text;
namespace Demo
{
public class Person
{
private int _id;
private string _name;
private DateTime _birthDay;
}
}
将光标移到“_name”变量上,然后双击“EncapsulateField”宏,就运行了该宏。运行后,你可以得到这样的代码:
using System;
using System.Collections.Generic;
using System.Text;
namespace Demo
{
public class Person
{
private int _id;
private string _name;
private DateTime _birthDay;
public string Name
{
get
{
return _name;
}
set
{
_name = value;
}
}
}
}
using System.Collections.Generic;
using System.Text;
namespace Demo
{
public class Person
{
private int _id;
private string _name;
private DateTime _birthDay;
public string Name
{
get
{
return _name;
}
set
{
_name = value;
}
}
}
}
可以看到“EncapsulateField”宏已经为private string _name;创建了相应的属性。
EncapsulateAllFields宏只需要将光标放在Person类的代码区域中,就可以正常执行。例如针对上面的代码,EncapsulateAllFields后可以为Person类中的每一个变量都生成相应的属性。(注:上面的代码中Name属性已经有定义,所有试图再添加Name属性时会抛出异常,在EncapsulateAllFields宏定义中,已经将该异常吃掉,所以,可以正确地为所有变量生成属性)。运行后的代码如下:
using System;
using System.Collections.Generic;
using System.Text;
namespace Demo
{
public class Person
{
private int _id;
private string _name;
private DateTime _birthDay;
public string Name
{
get
{
return _name;
}
set
{
_name = value;
}
}
public int Id
{
get
{
return _id;
}
set
{
_id = value;
}
}
public System.DateTime BirthDay
{
get
{
return _birthDay;
}
set
{
_birthDay = value;
}
}
}
}
using System.Collections.Generic;
using System.Text;
namespace Demo
{
public class Person
{
private int _id;
private string _name;
private DateTime _birthDay;
public string Name
{
get
{
return _name;
}
set
{
_name = value;
}
}
public int Id
{
get
{
return _id;
}
set
{
_id = value;
}
}
public System.DateTime BirthDay
{
get
{
return _birthDay;
}
set
{
_birthDay = value;
}
}
}
}