空的二传手与属性中没有二传手

时间:2016-06-30 13:38:31

标签: c# .net properties

这两个属性实现有什么区别?

public override string A
{
    get { return "s"; }
    set { }
}

public override string A
{
    get { return "s"; }
}

5 个答案:

答案 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,所以基类必须 overrideget(否则代码不会{&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)

首先:有一个二传手,但是那个制定者什么都不做 第二:没有二传手