gpt4 book ai didi

c# - 接口(interface)与抽象类(在特定情况下)

转载 作者:太空狗 更新时间:2023-10-29 20:59:00 25 4
gpt4 key购买 nike

为了避免重复,我在这个网站上做了一些搜索,但是大多数问题都是关于接口(interface)和抽象类之间的抽象比较。

我的问题更多是针对我的具体情况,尤其是我和我的同事,我们不同意相同的方法。

我有3个类(class)

  1. 节点(文件夹结构中的抽象节点)
  2. 文件夹(包含子文件夹和文件)
  3. 文件

我们使用复合模式来获取每个用户/组的所有文件夹及其权限

Node,应该是接口(interface)还是抽象类?FolderFile 继承自 Node。

在我看来,我认为 Node 应该是一个抽象的,因为 File 不应该拥有 Folder 拥有的所有方法,例如 AddFolder (Node节点)

我的同事说最好使用接口(interface)来更好地编码。

编辑: 我重写了我的节点如下:

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
}
}

最佳答案

这里没有正确答案。这真的归结为这个问题

节点是否有任何实现文件文件夹?"

如果答案是,则需要一个抽象类,可选地带有一个描述其行为的接口(interface)

如果答案是,那么您可以将其设为接口(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!
}
}

关于c# - 接口(interface)与抽象类(在特定情况下),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14746956/

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