我在这个网站上做了一些搜索,以避免重复,但大多数问题都是关于接口和抽象类之间的抽象比较.
我的问题更多的是我的具体情况,特别是我的同事,我不同意同样的方法.
我有3节课
我们使用复合模式来获取每个用户/组的所有文件夹及其权限
该类Node,应该是接口还是Abstract类?
Folder并File继承自Node.
在我看来,我认为Node应该是一个摘要,因为File不应该有所有的方法,Folder例如AddFolder(Node node)
我的同事说最好使用界面来实现更好的编码.
编辑:我重写了我的节点如下:
public abstract class Node
{
public string Name { get; set; }
public string FullName { get; set; }
public Node Parent { get; set; }
public List<PermissionEntry> Permissions { get; set; }
protected Node(string fullName)
{
FullName = fullName;
Permissions = new List<PermissionEntry>();
}
public void AssignPermission()
{
// some Codes
}
}
Run Code Online (Sandbox Code Playgroud)
这里没有正确的答案.这真的归结为这个问题
"是否Node有任何的实现是共同的File和Folder?"
如果答案是肯定的,则需要一个Abstract类,可选择使用描述其行为的Interface
如果答案为否,那么您可以将其设置为接口,可选择使用抽象基础实现.
所以你看 - 它的方式基本相同.
此外,还有什么能够阻止Folder加入上没有定义额外的方法Node,其File将不会共享.
例如,
public interface INode
{
void SomethingCommon();
}
public File: INode
{
public void SomethingCommon(){...} // I must implement this
}
public Folder : INode
{
public void SomethingCommon(){...} // I must implement this
public void AddFolder(string name)
{
// File doesnt need this method, its not on the interface!
}
}
Run Code Online (Sandbox Code Playgroud)
拒绝接口的理由似乎不对.为什么File会有一个方法,AddFolder如果Node是一个抽象类,但如果它是一个接口?
如果您具有所有子项共享的通用功能,通常会选择创建抽象类.在这种情况下,这个通用功能将由抽象基类实现,因此不必在所有子类中实现.
在许多情况下,您甚至同时拥有:
| 归档时间: |
|
| 查看次数: |
237 次 |
| 最近记录: |