C# 4个具有相同属性和方法的类-是否可以只创建一个?

C# 4个具有相同属性和方法的类-是否可以只创建一个?,c#,class,C#,Class,我还有一个问题要问,所以在思考之后,我可能用错误的方式来处理这个问题 我有4个类,它们具有相同的属性和方法。 有些类具有自己的属性和方法(而不是覆盖现有的属性和方法) 目前,我将每个类创建为: public class ClassOne { public ClassOne() { } public int ID {get;set;} // More properties here public void Set(){ // Do

我还有一个问题要问,所以在思考之后,我可能用错误的方式来处理这个问题

我有4个类,它们具有相同的属性和方法。 有些类具有自己的属性和方法(而不是覆盖现有的属性和方法)

目前,我将每个类创建为:

public class ClassOne
{
    public ClassOne()
    {
    }

    public int ID {get;set;}
    // More properties here

    public void Set(){
        // Do Stuff to save this
    }
    // More Methods here
}
我不能创建一个类来生成所有4个类吗? 在类本身中,我只为该类创建特定的属性/方法


重复代码对我来说似乎很奇怪,我确信一定有办法做到这一点,只是不知道怎么做。

你能用你的属性创建一个基类并从该类继承吗?

为什么不使用继承

 public class ClassOne 
 {
     public ClassOne()
     {
     }

     public virtual int ID {get;set;}
     // More properties here

     public virtual void Set(){
         // Do Stuff to save this
     }
     // More Methods here }

 public class ClassTwo : ClassOne 
 { 
    public string ClassTwoString { get; set; }
 }

 public class ClassThree : ClassOne 
 { 
    public string ClassThreeString { get; set; }
 }

你的处境是它被发明的主要原因之一。这样,你就可以写作了

public class Base
{
    // Properties and methods common to all
}
public class ClassOne : Base
{
    // Properties and methods specific to ClassOne
}
public class ClassTwo : Base
{
    // Properties and methods specific to ClassTwo
}
public class ClassThree : Base
{
    // Properties and methods specific to ClassThree
}
public class ClassFour : Base
{
    // Properties and methods specific to ClassFour
}

你能让它们都从同一个类继承吗?如果是这样,那听起来很理想

如果不允许它们继承,您可以编写一个接口来描述它们各自使用的方法和属性。然后可以通过同一接口调用类的每个实例


如果再次排除这种可能性,您可以编写一个反射式赋值器/访问器。但您不应该这样做。

根据要求,使用接口和抽象类编写更多代码:

接口只是一个蓝图,定义与其他“基类”兼容所需的属性和方法

抽象类可以包含代码,但不能实例化,它们是类的起点形式,但本身不是完整的类

public abstract class ABaseClass : IBaseClass
{
    public int ID {get;set;}

    public void Set(){
        // Do Stuff to save 
    }    
}
每个类都从抽象类继承,然后可以重写和实现它想要的任何东西,但是定制它是必要的

public class ClassOne : ABaseClass
{

}
public class ClassTwo : ABaseClass
{

}
public class ClassThree : ABaseClass
{

}
public class ClassFour : ABaseClass
{

}

ps.不完全确定我的语法是否100%正确

能否提供具体细节?您希望完成什么?创建一个接口,定义通用方法和属性名。并创建一个抽象基类,其中包含所有这些类的公共代码,并实现该接口。然后,您的四个类中的每一个都从抽象基类继承,覆盖/实现不同的内容。@chad因为我是新手,您能提供一些示例代码或引用吗?与其从ClassOne继承,不如使用抽象基类和接口。@chad,您是对的,不过,我想这只是一个约定命名约定的问题。我怀疑他是否真的把他的类命名为“ClassOne”、“ClassTwo”等等。简单的解释加上简单的代码,这是一个很棒的答案。非常感谢。如果可以的话,还有一个问题,我能否直接在接口中定义我的方法?像
Set()
?既然它对所有类都是通用的,我必须在每个类中重写它吗?我需要的是,我可以在没有接口和抽象类的情况下,通过继承来做同样的事情,那么为什么它更受欢迎呢?接口就是接口。它没有提到实施。您使用抽象类来定义所有公共代码,因为它不完整。这只是一个起点,虽然你可以使用一个真正的类,但如果这个类在功能上不完整,你真的不希望它是可实例化的。我想说的是,我可以从一个具有所有属性和方法的类继承,这使得接口看起来毫无用处,所以我真正的问题是
添加界面的好处是什么?
我不确定你的应用程序是如何工作的,但假设你有一个方法,理论上可以接受你的任何一个类(一、二、三或四)。它不关心额外的东西或实现,但它关心传递给它的任何东西都有一个特定的属性或函数。接口提供了这种能力。它允许您将类“分组”,并告诉函数传递给它的类并不重要,只要它实现了这个接口,我们就可以使用它。
public class ClassOne : ABaseClass
{

}
public class ClassTwo : ABaseClass
{

}
public class ClassThree : ABaseClass
{

}
public class ClassFour : ABaseClass
{

}