gpt4 book ai didi

c# - 将 setter 添加到覆盖中的属性

转载 作者:可可西里 更新时间:2023-11-01 03:08:56 25 4
gpt4 key购买 nike

为什么在实现接口(interface)时允许更改属性中 getter 或 setter 的可见性和存在性?

interface IFoo
{
string Bar { get; }
}

class RealFoo : IFoo
{
public RealFoo(string bar)
{
this.Bar = bar;
}

public string Bar { get; private set; }
}

class StubFoo : IFoo
{
public string Bar { get; set; }
}

...在实现抽象类时做同样的事情是不合法的?

abstract class AbstractFoo : IFoo
{
public abstract string Bar { get; }
}

class RealFoo : AbstractFoo
{
public RealFoo(string bar)
{
this.Bar = bar;
}

// Cannot override because 'Bar' does not have an overridable set accessor
public override string Bar { get; private set; }
}

最佳答案

接口(interface)声明类必须具有哪些公共(public)属性(这只是一个约定)。这意味着您需要拥有这些属性,但可以添加到它们。

抽象类声明了这些属性的实际结构。所以如果你没有抽象基类中的setter,你就不能在实现中添加它。
当您编写覆盖修饰符时,它会在基类中查找要覆盖的内容。

关于c# - 将 setter 添加到覆盖中的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6058352/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com