Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 仅处理属性时的接口与抽象类_C#_Abstract - Fatal编程技术网

C# 仅处理属性时的接口与抽象类

C# 仅处理属性时的接口与抽象类,c#,abstract,C#,Abstract,这不是一个技术障碍或挑战,我想说这是一个一般性的讨论!!如果这是一个不合适的论坛,请让我知道我会删除它 我有一个场景,在这个场景中,从一个Web服务获取10个xml,每个xml都有一些公共属性和该xml的一些特定属性 类结构将类似于下面的内容 Public abstract class employee { Public int Id {get; set;} Public int Name {get; set;} } Public class PermanentEmplo

这不是一个技术障碍或挑战,我想说这是一个一般性的讨论!!如果这是一个不合适的论坛,请让我知道我会删除它

我有一个场景,在这个场景中,从一个Web服务获取10个xml,每个xml都有一些公共属性和该xml的一些特定属性

类结构将类似于下面的内容

Public abstract class employee
{
     Public int Id {get; set;}
     Public int Name {get; set;}
 }

Public class PermanentEmployee: Employee
{
      // PermanentEmployee specific props
}

Public class ContractEmployee
{
      //Contractor​ specific properties
}
给定上述场景,employee类应该是抽象类还是接口类。哪个更好

我将只有属性,没有方法

我的观点:我会选择抽象类,因为我可以重用属性,接口没有意义,因为并没有方法

如果要将属性“重用”到几个“子类”,我将始终使用抽象类

如果您只想定义方法签名,而不是它的“逻辑体”,那么使用接口


总之,对于您与我们共享的源代码,我会这样做。

我将定义一个接口IEmployee和抽象类。这使接口具有了通用传递的灵活性,但是抽象类对于那些需要重复代码(DRY等)的情况非常有用


如-
中所述,如果您提出问题的动机是“我想参加关于_______;的讨论”,那么你不应该在这里提问。
它仍然吸引了主要的选项答案,应该关闭。我认为这个问题可以继续提问-但只有在你提出一些特定场景的情况下,你需要决定界面与抽象class@ManthanDavda您还可以在/r/dotnet和/r/csharp中尝试reddit,他们喜欢这种讨论。抽象类也可以通用地传递,所以基于您的原因,不需要接口。此外,接口是语言中抽象类的“变通方法”,不支持多重继承。示例非常简化,但在将来的某个时候,抽象类可能会有一些接口可能不需要的代码(可能是某种发布/订阅通知)(你现在有一些不需要观察的基于IEEmployee的类)。现在将其拆分将有助于将来。“Yagni”(你不需要它)嗯@Fabio,我不同意。只是将抽象类的方法虚拟化了,你会得到同样的行为。抽象类的唯一问题是子类只能从一个基类派生,而子类可以通过接口实现多个接口
public interface IEmployee
{
    int Id { get; set;}
    int Name { get; set;}
}

public abstract class Employee : IEmployee
{
    public int Id { get; set;}
    public int Name { get; set;}
}

public class PermanentEmployee: Employee
{
     // PermanentEmployee specific props
}

public class ContractEmployee : Employee
{
    //Contractor​ specific properties
}