我在这个网站上做了一些搜索,以避免重复,但大多数问题都是关于接口和抽象类之间的抽象比较. 
  
 
我的问题更多的是我的具体情况,特别是我的同事,我不同意同样的方法.
我有3节课
>节点(文件夹结构中的抽象节点)
>文件夹(包含子文件夹和文件)
>文件
我们使用复合模式来获取每个用户/组的所有文件夹及其权限
类Node,它应该是接口还是Abstract类?
文件夹和文件继承自Node.
在我看来,我认为Node应该是一个抽象,因为File不应该具有Folderhas的所有方法,例如AddFolder(Node 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
    }
}
解决方法
 这里没有正确的答案.这真的归结为这个问题 
  
 
        “节点是否具有文件和文件夹通用的任何实现?”
如果答案是肯定的,则需要一个Abstract类,可选择使用描述其行为的Interface
如果答案为否,那么您可以将其设置为接口,可选择使用抽象基础实现.
所以你看 – 它的方式基本相同.
此外,没有什么停止文件夹添加未在节点上定义的其他方法哪个文件不会共享.
例如,
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!
    }
}