Rafael Herscovici
Rafael Herscovici

Reputation: 17094

4 Classes with the same properties and methods - is it possible to create only one?

i have another question open here on SO and after thinking about it, i may be approaching this in the wrong way.

i have 4 classes, that have the same properties and methods. some of the classes, have their own properties and methods ( not overrides of the existing ones ).

currently i create each class as:

public class ClassOne
{
    public ClassOne()
    {
    }

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

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

cant i create one class that will generate all of the 4 classes? and in the classes themselfs i only create specific properties/methods for that class?

repeating the code seems very odd to me, im sure there must be a way to do this, just dont know how.

Upvotes: 0

Views: 165

Answers (5)

CaffGeek
CaffGeek

Reputation: 22054

As requested, more code, using interfaces and abstract classes:

An interface is just a blueprint, defining what properties and methods are required to be compatible with other "BaseClasses"

public interface IBaseClass
{
    public int ID {get;set;}    
    public void Set();
}

Abstract classes can contain code, but can not be instantiated, they are form of starting point for a class, but not a complete class themselves.

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

    public void Set(){
        // Do Stuff to save 
    }    
}

Each class inherits from the abstract class and can then override and implement whatever it wants, customizing it however is necessary.

public class ClassOne : ABaseClass
{

}
public class ClassTwo : ABaseClass
{

}
public class ClassThree : ABaseClass
{

}
public class ClassFour : ABaseClass
{

}

ps. not entirely sure if my syntax is 100% correct

Upvotes: 2

eouw0o83hf
eouw0o83hf

Reputation: 9588

Can you make them all inherit off of the same class? If so, that sounds ideal.

Barring the possibility of making them inherit, you could write an interface that describes the methods and properties which each of them use. Then you can call each instance of the class through the same interface.

Barring again that possibility, you could write a reflective assignor/accessor. But you shouldn't do that.

Upvotes: 0

Adam Mihalcin
Adam Mihalcin

Reputation: 14458

Your situation is one of the main reasons why inheritance was invented. So with that, you can write

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
}

Upvotes: 4

Steve Danner
Steve Danner

Reputation: 22148

Why not use inheritance??

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

Upvotes: 0

Denis Biondic
Denis Biondic

Reputation: 8201

Could you simply make a base class with your properties and inherit from that class?

Upvotes: 2

Related Questions