使一个班级只能从另一个班级使用

时间:2020-02-11 11:11:57

标签: c# inheritance

在我的解决方案中,我有一个包含以下类的项目(DLL):

public class cDB : IErrorExtender
{
    // Exception per le funzioni Static
    #region IErrorExtender members
    public ErrorList ErrorListMessages { get; set; }                        // ErrorList

    public bool IsInError                                                   // Errori?
    {
        get { return ErrorListMessages.Count > 0; }
    }
    #endregion

    public cLogger logger { get { return ErrorListMessages.TheLog; } }      // Logger

    private string ConnString { get; set; }                                 // Stringa di connessione
    private string DbName { get; set; }                                     // DB name

    public OleDbConnection Cnn;                                             // Oggetto connection
    public OleDbTransaction _trans { get; private set; }                    // Oggetto per transazione ole

    /// <summary>
    /// Costruttore
    /// </summary>
    /// <param name="cnn"></param>
    /// <param name="connectDb"></param>
    /// <param name="theLog"></param>
    public cDB(OleDbConnection cnn, bool connectDb, cLogger theLog)
    {
        Cnn = cnn;
        DbName = System.IO.Path.GetFileName(cnn.DataSource);
        ErrorListMessages = new ErrorList(theLog, LoggingTypes.OnlyErrors, this.ToString());

        this.ConnString = cnn.ConnectionString;
        if (connectDb)
        {
            try
            {
                ConnectionOpen();
            }
            catch (Exception exc)
            {
                ErrorListMessages.SetInternalError(exc, "cDB()");
            }
        }
    }

    public void Test()
    {}
}   

由于它是公开的,所以在主要项目中有很多引用(请考虑这是一个遗留项目):

Engine.cDB dbo = new Engine.cDB();

现在,在主项目中,我有一个引用cDB的类:

public class cDataBase : INotifyPropertyChanged
{
    public cDB DBO { get; }    
}   

基本上我想要的是,类cDB必须仅在cDataBase类的实例中才可用,所以像这样:

cDataBase.DBO.Test();

,而不是通过创建上面所写的等式。有帮助吗?

1 个答案:

答案 0 :(得分:4)

一个选择是将cDB-Class的构造函数设为内部,因此只能在同一项目/类库中使用:

public class cDB : IErrorExtender
{
    internal cDB() { }
}
相关问题