Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 生成自定义属性代码i VS?_C#_Visual Studio 2010_Properties_Code Generation - Fatal编程技术网

C# 生成自定义属性代码i VS?

C# 生成自定义属性代码i VS?,c#,visual-studio-2010,properties,code-generation,C#,Visual Studio 2010,Properties,Code Generation,我讨厌写重复的代码 在我当前的项目中,我需要编写在每个类中看起来相同但在每个类中不同的属性 我的愿望是从私有memeber变量生成自定义属性。假设我声明了这样一个Name变量 private string Name; 在我的第一堂课中,我想自动生成如下属性: private string m_name; public string Name { get { return m_name; } set { m_name = value; // some code....e.g. m_c

我讨厌写重复的代码

在我当前的项目中,我需要编写在每个类中看起来相同但在每个类中不同的属性

我的愿望是从私有memeber变量生成自定义属性。假设我声明了这样一个Name变量

private string Name;
在我的第一堂课中,我想自动生成如下属性:

private string m_name;
public string Name
{
get
{ return m_name; }
set
{
  m_name = value;
  // some code....e.g.
  m_counter++;
}
public abstract class BaseClass
{
    private string m_name;

    public string Name
    {
        get { return m_name; }
        set
        {
            if (BeforeNameSet(value))
                m_name = value;
        }
    }

    public virtual bool BeforeNameSet(string name)
    {
        return true;
    }
}

public abstract class ChildClass : BaseClass
{
    public override bool BeforeNameSet(string name)
    {
        // do the part that is different
        return false;
    }
}
也许我想在我的第二个类中实现另一个,例如

private string m_name;
public string Name
{
get
{ return m_name; }
set
{
  // some code....e.g.
  if(MyValidationFramework.Validate("Name", value))
  {
    m_name = value;
  }
}
我知道我可以创建自己的代码片段。由于我经常更改属性实现,因此我希望能够从模板生成属性,然后更改模板并再次生成属性。这能做到吗


谢谢

这不是对你问题的直接回答。但是,在您展示的示例中,为什么不使用基类并从中继承,如下所示:

private string m_name;
public string Name
{
get
{ return m_name; }
set
{
  m_name = value;
  // some code....e.g.
  m_counter++;
}
public abstract class BaseClass
{
    private string m_name;

    public string Name
    {
        get { return m_name; }
        set
        {
            if (BeforeNameSet(value))
                m_name = value;
        }
    }

    public virtual bool BeforeNameSet(string name)
    {
        return true;
    }
}

public abstract class ChildClass : BaseClass
{
    public override bool BeforeNameSet(string name)
    {
        // do the part that is different
        return false;
    }
}
[编辑]

我明白了,代码片段不是你的选择。 您可以创建一个项目模板,但最终这将是更大的工作量,因为您希望能够动态更新这些模板。项目模板是一个zip文件,您需要为其更改内容


看来复制/粘贴是你最好的选择。

我现在就是这样做的!但它只有在实现相似的情况下才起作用。@Erik Z-您可以保留基类中相似的部分,以及子类中不同的部分。