这两个属性实现有什么区别?
public override string A
{
get { return "s"; }
set { }
}
public override string A
{
get { return "s"; }
}
答案 0 :(得分:22)
好吧,因为<header>
<nav class="top-nav">
<div class="nav-wrapper">
<ul class="right hide-on-med-and-down">
<li><a href="#">Log In</a></li>
<li><a href="#">Sign Up</a></li>
</ul>
</div>
</nav>
<ul style="width:120px; margin-top:65px;" class="side-nav fixed">
<li><a href="#">Icon 1</a></li>
<li><a href="#">Icon 2</a></li>
</ul>
</header>
是A
,所以基类必须 override
和get
(否则代码不会{&1;} t编译)例如
set
现在您有两个不同的派生类:
public class MyBase {
public virtual String A {
get {
return "getBaseA";
}
set {
throw new NotSupportedException("setBaseA");
}
}
}
让我们调用两个public class MyDerivedA: MyBase {
public override String A {
get {
return "s";
}
set { // set is overridden, now set does nothing
}
}
}
public class MyDerivedB: MyBase {
public override String A {
get {
return "s";
}
// set is not overridden, same as in the base class
}
}
方法:
set
答案 1 :(得分:6)
第一个将使用一个什么都不做的方法覆盖基类中A
的setter。所以你可以拥有A = ""
,但它什么也没做。
定义setter时的方法为public override TheCompilerGeneratedNameForSetterOfAInBaseClass(string value) { }
,第二种情况A = ""
将编译,但它将调用A
的基类设置器。
答案 2 :(得分:4)
此getter和setter 覆盖。
在执行 public class ScanningService
{
static Repository repository = new Repository();
SemaphoreSlim throttler = new SemaphoreSlim(initialCount: 7);
static List<Technology> activeTech = repository.getAll().ToList();
static List<string> activeTags = activeTech.Select(a => a.Tag.ToLower()).ToList();
private async Task<Details2> TryAsync(string resourceId)
{
await throttler.WaitAsync();
var accountlists = repository.getAllAccounts().ToList();
foreach (var I in accountlists)
{
if (!activeTags.Contains(customfield.Single().CUSTOMFIELDVALUE.ToLower()))
{
return resourceAccountListInfo.operation.Details;
}
}
///code goes here.. }
finally
{
throttler.Release();
}
时,此代码将在两种情况下进行编译。
在第一种情况下,我们覆盖set属性,这意味着当您尝试为对象分配值时,不会发生任何事情。在第二种情况下,它将使用基类实现
答案 3 :(得分:2)
你使用override
,所以我假设你的片段来自的类有一个类似
public virtual string A { get; set; }
如果你只是覆盖了getter(你的第二个例子),那么仍将使用原始的setter。您只是看不到结果,因为它被您的覆盖隐藏了。
当您还使用空方法覆盖setter时,将不会调用基本setter。
答案 4 :(得分:1)
首先:有一个二传手,但是那个制定者什么都不做 第二:没有二传手