我创建了一个继承List的Class EventList,每次添加,插入或删除时都触发一个Event:
public class EventList<T> : List<T>
{
public event ListChangedEventDelegate ListChanged;
public delegate void ListChangedEventDelegate();
public new void Add(T item)
{
base.Add(item);
if (ListChanged != null
&& ListChanged.GetInvocationList().Any())
{
ListChanged();
}
}
...
}
Run Code Online (Sandbox Code Playgroud)
在片刻我将它用作这样的属性:
public EventList List
{
get { return m_List; }
set
{
m_List.ListChanged -= List_ListChanged;
m_List = value;
m_List.ListChanged += List_ListChanged;
List_ListChanged();
}
}
Run Code Online (Sandbox Code Playgroud)
现在我的问题是,我可以以某种方式处理一个新的对象是否被引用或阻止它,所以我不必在setter中做事件接线?
当然,我可以将属性更改为"私有集",但我希望能够将该类用作变量.
我刚刚编写了一个小单元测试,其中我使用了StringBuilder.
var stringBuilder = new StringBuilder();
stringBuilder.Append("Foo");
Assert.AreEqual(stringBuilder, "Foo");
Run Code Online (Sandbox Code Playgroud)
此测试将失败.
Expected: <Foo>
But was: "Foo"
Run Code Online (Sandbox Code Playgroud)
但是,如果我将Assert更改为
Assert.AreEqual(stringBuilder.ToString(), "Foo");
Run Code Online (Sandbox Code Playgroud)
测试将通过.
那么隐式调用和ToString()方法的显式调用之间有什么区别?或者/这些括号(<>)代表什么?