在c#中有什么捷径可以让setter额外设置一个脏标志吗?
本文关键字:设置 一个 标志 外设 什么 捷径 setter | 更新日期: 2023-09-27 18:14:08
目前,为了让setter也设置一个dirty属性,我必须这样做:
private bool _isDirty;
private int _lives;
public int Lives{
get { return _lives; }
set {
if (_lives != value){
_lives = value;
_isDirty = true;
}
}
}
这不是一个巨大的痛苦编写,但它是一个非常垂直的空间和重复的代码块,如果我在我的项目中使用了很多这种模式。
在c#中是否有更短的语法来做这件事?
我特别想完成的是某些变量的变化应该触发一个脏标志,在代码的呈现阶段可以用来刷新所呈现对象的属性。
创建一个类,在其中实现一个helper方法。
class DirtyClass
{
protected bool IsDirty { get; set;}
protected void ChangeProperty<T>(ref T backing, T Value)
{
if(!backing.Equals(value))
{
backing = value;
IsDirty = true;
}
}
}
在setter
中使用helper方法class LivesCounter : DirtyClass
{
private int _lives;
public int Lives
{
get { return _lives; }
set { ChangeProperty(ref _lives, value); }
}
}
处理null元素留作练习。
正如jdl134679所提到的,查看INotifyPropertyChanged接口。
如果您不喜欢类的方式,您也可以创建一个代码片段。信息:https://msdn.microsoft.com/en-us/library/ms165396.aspx
手工创建一个代码片段:https://msdn.microsoft.com/en-us/library/ms165394.aspx
或
安装代码段设计器https://visualstudiogallery.msdn.microsoft.com/B08B0375-139E-41D7-AF9B-FAEE50F68392
创建一个代码片段并命名为propd(属性快捷方式)
<?xml version="1.0" encoding="utf-8"?>
<CodeSnippets
xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<CodeSnippet Format="1.0.0">
<Header>
<Title>Properties with Dirty</Title>
<Author>Myself</Author>
<Description>Creates a property which ties to isDrty</Description>
<Shortcut>propisd</Shortcut>
</Header>
<Snippet>
<Code Language="C#">
<![CDATA[private $TYPE$ $PRIVATENAME$;
public $TYPE$ $PROPERTYNAME$
{
get { return $PRIVATENAME$; }
set
{
if ($PRIVATENAME$ != value)
{
$PRIVATENAME$ = value;
_isDirty = true;
}
}
}]]>
</Code>
<Declarations>
<Literal>
<ID>TYPE</ID>
<ToolTip>replace with the type</ToolTip>
<Default>"TYPE"</Default>
</Literal>
<Literal>
<ID>PRIVATENAME</ID>
<ToolTip>replace with the private name</ToolTip>
<Default>"PRIVATENAME"</Default>
</Literal>
<Literal>
<ID>PROPERTYNAME</ID>
<ToolTip>replace with the property name</ToolTip>
<Default>"PROPERTYNAME"</Default>
</Literal>
</Declarations>
</Snippet>
</CodeSnippet>
</CodeSnippets>
按要求保存此文件。代码段,并通过代码段管理器添加。
无论何时键入propd后跟TAB,都将看到该代码片段。通过使用Tab键,您将完成替换。比如你会输入'prop'然后按TAB键
不可以——您可以创建自己的结构来封装这种行为,例如:一个泛型结构,包含一个值、一个IsDirty属性和一种清除标志的方法。