czwartek, 12 kwietnia 2012

Chroniony konstruktor w klasie abstrakcyjnej

Problem typu "the best design". Mamy klasę abstrakcyjną:

Code:
    public abstract class Connection
    {
        protected DbConnection DbConnection;

        public Connection(DbConnection dbConnection)
        {
            DbConnection = dbConnection;
        }
    }

Czy jest to poprawny kod? Tak jest z punktu widzenia kompilatora jest to całkowicie poprawny kod. Obiektu klasy abstrakcyjnej nie da się utworzyć. Tak więc w wielu źródłach można znaleźć informację, aby konstruktor uczynić chroniony - w końcu i tak bezpośrednio z niego nie skorzystamy.
Lepsza definicja klasy będzie mieć więc następującą postać:

Code:
    public abstract class Connection
    {
        protected DbConnection DbConnection;

        protected Connection(DbConnection dbConnection)
        {
            DbConnection = dbConnection;
        }
    }

Brak komentarzy:

Prześlij komentarz