Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can a Custom C# object contain a property of the same type as itself?

If I have created the following Employee object (simplified)...

 public class Employee
    {
        public Employee()
        {       
        }

        public String StaffID { get; set; }
        public String Forename { get; set; }
        public String Surname { get; set; }
    }

... would it be acceptable to have another property in the Employee object with a Type also being Employee to hold their Manager's details (as shown below)?

 public class Employee
    {
        public Employee()
        {       
        }

        public String StaffID { get; set; }
        public String Forename { get; set; }
        public String Surname { get; set; }

        public Employee Manager { get; set; }
    }

Also, what is the best way to instantiate the Employee object for the Manager property? Obviously including this.Manager = new Employee(); in the constructor will cause an infinite loop. Would a Manager class that inherrits from Employee be the best way (even though all the properties would be identical)?

like image 515
triplestones Avatar asked Jan 17 '12 10:01

triplestones


People also ask

Can I define my own operators?

Yes! (well, sort of) There are a couple publicly available tools to help you out. Both use preprocessor code generation to create templates which implement the custom operators.

Can C++ do everything C can?

Although C++0x did include some of C99 features, many of them are just inherently incompatible, like the complex type. Show activity on this post. You can do almost everything in any of the programming languages.

Can C be run on any platform?

No.... there are C and C++ compilers for many many many platforms, but different compilers have their own quirks, and the libraries they link to are completely different on various platforms.

Can we define our own operator in C++?

C++ supports operator overloading, but you are not allowed to create your own operators.


1 Answers

First, the answer is Yes an object can have a field that contains an instance of itself. It can even have methods that accept or return the instances of the same class, and it can even depend on itself in the definition of the class, e.g:

public class Person : IComparable<Person> //legal, recursive definition
{
   //fields (or properties) that are of type Person
   public Person Father;
   public Person Mother;
   public List<Person> Children;

   // method that takes a Person as a parameter
   public bool IsParent(Person potentialParent)
   {
      ....
   }

   //method that returs a Person
   public Person Clone()
   {
      //TODO: real implementation coming soon
   }

   public Person(){}

   //constructor that takes persons as arguments
   public Person(Person father, Person Mother)
   {
      Father = father;
      Mother = mother;
   }
}

By default all reference values are null'd so you won't have a constructor problem unless you create one yourself. So, Yes, there can be some issues with circular references and endless loops (each parent has children that have children that have parents etc...) but usually they can be trivially detected and avoided.

The only times I've encountered these kind of problems is when I used XML (or other text-based) serialization on circularly referenced objects.

like image 108
SWeko Avatar answered Sep 21 '22 22:09

SWeko