Вложенные классы отличаются от подклассов тем, как они могут получить доступ к свойствам и закрытым полям класса контейнера при наследовании от него.
Вложенные классы представляют собой сочетание наследования с инкапсуляцией в ООП в терминах реализации одноэлементного шаблона проектирования, где зависимости хорошо скрыты, а один класс обеспечивает одну точку доступа со статическим доступом к внутренним классам при сохранении экземпляра. возможность.
Например, используя практический класс для подключения к базе данных и вставки данных:
public class WebDemoContext
{
private SqlConnection Conn;
private string connStr = ConfigurationManager.ConnectionStrings["WebAppDemoConnString"].ConnectionString;
protected void connect()
{
Conn = new SqlConnection(connStr);
}
public class WebAppDemo_ORM : WebDemoContext
{
public int UserID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Phone { get; set; }
public string Email { get; set; }
public string UserName { get; set; }
public string UserPassword { get; set; }
public int result = 0;
public void RegisterUser()
{
connect();
SqlCommand cmd = new SqlCommand("dbo.RegisterUser", Conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("FirstName", FirstName);
cmd.Parameters.AddWithValue("LastName", LastName);
cmd.Parameters.AddWithValue("Phone", Phone);
cmd.Parameters.AddWithValue("Email", Email);
cmd.Parameters.AddWithValue("UserName", UserName);
cmd.Parameters.AddWithValue("UserPassword", UserPassword);
try
{
Conn.Open();
result = cmd.ExecuteNonQuery();
}
catch (SqlException se)
{
DBErrorLog.DbServLog(se, se.ToString());
}
finally
{
Conn.Close();
}
}
}
}
Класс WebAppDemo_ORM
является вложенным классом внутри WebDemoContext
и в то же время наследуется от WebDemoContext
, таким образом, вложенный класс может получить доступ ко всем членам класса контейнера, включая закрытые, что может быть эффективным для сокращения DRY и достижение SOC .