Κλήση του βασικού κατασκευαστή σε C#

Αν κληρονομήσω από μια βασική κλάση και θέλω να περάσω κάτι από τον κατασκευαστή της κληρονομούμενης κλάσης στον κατασκευαστή της βασικής κλάσης, πώς το κάνω αυτό;

Για παράδειγμα,

Αν κληρονομήσω από την κλάση Exception θέλω να κάνω κάτι τέτοιο:

class MyExceptionClass : Exception
{
     public MyExceptionClass(string message, string extraInfo)
     {
         //This is where it's all falling apart
         base(message);
     }
}

Βασικά αυτό που θέλω είναι να μπορώ να περάσω το μήνυμα string στην βασική κλάση Exception.

Λύση

Τροποποιήστε τον κατασκευαστή σας με τον ακόλουθο τρόπο ώστε να καλεί σωστά τον κατασκευαστή της βασικής κλάσης:

public class MyExceptionClass : Exception
{
    public MyExceptionClass(string message, string extrainfo) : base(message)
    {
        //other stuff here
    }
}

Σημειώστε ότι ένας κατασκευαστής δεν είναι κάτι που μπορείτε να καλέσετε οποιαδήποτε στιγμή μέσα σε μια μέθοδο. Αυτός'είναι ο λόγος για τον οποίο λαμβάνετε σφάλματα στην κλήση σας στο σώμα του κατασκευαστή.

Σχόλια (10)

Σημειώστε ότι μπορείτε να χρησιμοποιήσετε στατικές μεθόδους μέσα στην κλήση του βασικού κατασκευαστή.

class MyExceptionClass : Exception
{
     public MyExceptionClass(string message, string extraInfo) : 
         base(ModifyMessage(message, extraInfo))
     {
     }

     private static string ModifyMessage(string message, string extraInfo)
     {
         Trace.WriteLine("message was " + message);
         return message.ToLowerInvariant() + Environment.NewLine + extraInfo;
     }
}
Σχόλια (10)
public class MyExceptionClass : Exception
{
    public MyExceptionClass(string message,
      Exception innerException): base(message, innerException)
    {
        //other stuff here
    }
}

Μπορείτε να περάσετε εσωτερική εξαίρεση σε έναν από τους κατασκευαστές.

Σχόλια (0)