Why could not make instance of Transaction class in System.Transactions namespace
c#, constructor, oop
Solution
If the constructor is not `public`, i.e if it were declared as `private`, `protected`, `internal` or `protected internal` you cannot create a instance of it.
It is declared `private`, I get the error saying "Cannot access private constructor".
Problem
I was just going through writing a code and found some thing strange. If i try to make instance of `Transaction` class like this ``` Transaction ts = new Transaction(); ``` compiler raise me error `The type System.Transactions.Transaction has no constructor defined` when i go through the definition of this class, i found it to be defined as public with no `Static` or `Abstract` keyword. ``` namespace System.Transactions { // Summary: // Represents a transaction. [Serializable] public class Transaction : IDisposable, ISerializable { // Summary: // Returns a value that indicates whether two System.Transactions.Transaction // instances are not equal. // // Parameters: // x: // The System.Transactions.Transaction instance that is to the left of the inequality // operator. // // y: // The System.Transactions.Transaction instance that is to the right of the // inequality operator. // // Returns: // true if x and y are not equal; otherwise, false. public static bool operator !=(Transaction x, Transaction y); // // Summary: // Tests whether two specified System.Transactions.Transaction instances are // equivalent. // // Parameters: // x: // The System.Transactions.Transaction instance that is to the left of the equality // operator. // // y: // The System.Transactions.Transaction instance that is to the right of the // equality operator. // // Returns: // true if x and y are equal; otherwise, false. public static bool operator ==(Transaction x, Transaction y); // Summary: // Gets or sets the ambient transaction. // // Returns: // A System.Transactions.Transaction that describes the current transaction. public static Transaction Current { get; set; } // // Summary: // Gets the isolation level of the transaction. // // Returns: // One of the System.Transactions.IsolationLevel values that indicates the isolation // level of the transaction. public IsolationLevel IsolationLevel { get; } // // Summary: // Retrieves additional information about a transaction. // // Returns: // A System.Transactions.TransactionInformation that contains additional information // about the transaction. public TransactionInformation TransactionInformation { get; } // Summary: // Indicates that the transaction is completed. // // Exceptions: // System.ObjectDisposedException: // An attempt to subscribe this event on a transaction that has been disposed. public event TransactionCompletedEventHandler TransactionCompleted; // Summary: // Creates a clone of the transaction. // // Returns: // A System.Transactions.Transaction that is a copy of the current transaction // object. public Transaction Clone(); // // Summary: // Creates a dependent clone of the transaction. // // Parameters: // cloneOption: // A System.Transactions.DependentCloneOption that controls what kind of dependent // transaction to create. // // Returns: // A System.Transactions.DependentTransaction that represents the dependent // clone. public DependentTransaction DependentClone(DependentCloneOption cloneOption); // // Summary: // Releases the resources that are held by the object. public void Dispose(); // // Summary: // Enlists a durable resource manager that supports two phase commit to participate // in a transaction. // // Parameters: // resourceManagerIdentifier: // A unique identifier for a resource manager, which should persist across resource // manager failure or reboot. // // enlistmentNotification: // An object that implements the System.Transactions.IEnlistmentNotification // interface to receive two phase commit notifications. // // enlistmentOptions: // System.Transactions.EnlistmentOptions.EnlistDuringPrepareRequired if the // resource manager wants to perform additional work during the prepare phase. // // Returns: // An System.Transactions.Enlistment object that describes the enlistment. public Enlistment EnlistDurable(Guid resourceManagerIdentifier, IEnlistmentNotification enlistmentNotification, EnlistmentOptions enlistmentOptions); // // Summary: // Enlists a durable resource manager that supports single phase commit optimization // to participate in a transaction. // // Parameters: // resourceManagerIdentifier: // A unique identifier for a resource manager, which should persist across resource // manager failure or reboot. // // singlePhaseNotification: // An object that implements the System.Transactions.ISinglePhaseNotification // interface that must be able to receive single phase commit and two phase // commit notifications. // // enlistmentOptions: // System.Transactions.EnlistmentOptions.EnlistDuringPrepareRequired if the // resource manager wants to perform additional work during the prepare phase. // // Returns: // An System.Transactions.Enlistment object that describes the enlistment. public Enlistment EnlistDurable(Guid resourceManagerIdentifier, ISinglePhaseNotification singlePhaseNotification, EnlistmentOptions enlistmentOptions); // // Summary: // Enlists a resource manager that has an internal transaction using a promotable // single phase enlistment (PSPE). // // Parameters: // promotableSinglePhaseNotification: // A System.Transactions.IPromotableSinglePhaseNotification interface implemented // by the participant. // // Returns: // A System.Transactions.SinglePhaseEnlistment interface implementation that // describes the enlistment. public bool EnlistPromotableSinglePhase(IPromotableSinglePhaseNotification promotableSinglePhaseNotification); // // Summary: // Enlists a volatile resource manager that supports two phase commit to participate // in a transaction. // // Parameters: // enlistmentNotification: // An object that implements the System.Transactions.IEnlistmentNotification // interface to receive two phase commit notifications. // // enlistmentOptions: // System.Transactions.EnlistmentOptions.EnlistDuringPrepareRequired if the // resource manager wants to perform additional work during the prepare phase. // // Returns: // An System.Transactions.Enlistment object that describes the enlistment. public Enlistment EnlistVolatile(IEnlistmentNotification enlistmentNotification, EnlistmentOptions enlistmentOptions); // // Summary: // Enlists a volatile resource manager that supports single phase commit optimization // to participate in a transaction. // // Parameters: // singlePhaseNotification: // An object that implements the System.Transactions.ISinglePhaseNotification // interface that must be able to receive single phase commit and two phase // commit notifications. // // enlistmentOptions: // System.Transactions.EnlistmentOptions.EnlistDuringPrepareRequired if the // resource manager wants to perform additional work during the prepare phase. // // Returns: // An System.Transactions.Enlistment object that describes the enlistment. public Enlistment EnlistVolatile(ISinglePhaseNotification singlePhaseNotification, EnlistmentOptions enlistmentOptions); // // Summary: // Determines whether this transaction and the specified object are equal. // // Parameters: // obj: // The object to compare with this instance. // // Returns: // true if obj and this transaction are identical; otherwise, false. public override bool Equals(object obj); // // Summary: // Returns the hash code for this instance. // // Returns: // A 32-bit signed integer hash code. public override int GetHashCode(); // // Summary: // Rolls back (aborts) the transaction. public void Rollback(); // // Summary: // Rolls back (aborts) the transaction. // // Parameters: // e: // An explanation of why a rollback occurred. public void Rollback(Exception e); } } ``` If class is public, then why compiler not creating default constructor for me ??