gpt4 book ai didi

c# - C# 中具有具体 setter 的抽象 getter

转载 作者:太空狗 更新时间:2023-10-29 23:03:36 26 4
gpt4 key购买 nike

我正在尝试为实现 IList 的只读集合编写一个抽象基类。这样的基类应该实现 set-indexer 以抛出 NotSupportedException,但将 get-indexer 保留为抽象。 C# 允许这种情况吗?这是我到目前为止所拥有的:

public abstract class ReadOnlyList : IList {

public bool IsReadOnly { get { return true; } }

public object this[int index] {
get {
// there is nothing to put here! Ideally it would be left abstract.
throw new NotImplementedException();
}
set {
throw new NotSupportedException("The collection is read-only.");
}
}

// other members of IList ...
}

理想情况下,ReadOnlyList 能够实现 setter 但保留 getter 抽象。有没有允许这样做的语法?

最佳答案

将工作委托(delegate)给 protected 成员,然后您可以根据所需的行为将其标记为抽象的或虚拟的。尝试这样的事情:

 // implementor MUST override
protected abstract object IndexerGet(int index);

// implementor can override if he wants..
protected virtual void IndexerSet(int index, object value)
{
throw new NotSupportedException("The collection is read-only.");
}

public object this[int index] {
get {
return IndexerGet(index);
}
set {
IndexerSet(index, value);
}
}

关于c# - C# 中具有具体 setter 的抽象 getter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4447982/

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