2015-08-28 102 views
-3

這是一個使用數據庫的註冊應用程序的一段代碼。因爲我可以說我知道面向對象的基本原理,所以我理解這個代碼除了第一行。 一個對象(reader)如何成爲另一個對象(cmd1)與另一個類(SqlCommand)的方法(ExecuteReader())?我希望我能創建一個對象的唯一方法就是像這樣寫(std :: object class = new class())。 這個被解釋的鏈接也會受到歡迎。這條線是幹什麼的?

using(SqlDataReader reader = cmd1.ExecuteReader()) 
{ 
    if (reader.Read()) 
    { 
     reader.Close(); 
     if (textBox4.Text == textBox5.Text) 
     { 
      using (SqlCommand cmd = new SqlCommand("UPDATE info SET [email protected] WHERE [email protected] AND [email protected]", conn)) 
      { 
       cmd.Parameters.AddWithValue("@Password", textBox4.Text); 
       cmd.Parameters.AddWithValue("@Id", textBox3.Text); 
       cmd.Parameters.AddWithValue("@Password1", textBox2.Text); 
       cmd.ExecuteNonQuery(); 
      } 
      MessageBox.Show("Password has been changed"); 
     } 
     else 
      MessageBox.Show("The new password doesn't match the one written in repeat the new password blank space "); 
    } 
    else 
     MessageBox.Show("Wrong Id or Password"); 
} 
+3

你知道方法如何返回一個值,如int或字符串?他們也可以返回對象的實例。 ExecuteReader返回一個'SqlReader'對象的實例。 '使用'塊使用該對象,然後一旦該塊完成,它就擺脫該對象。 – sab669

+0

方法可以返回對象。如果每個返回類型必須是「無效」的,那麼寫一個面向對象的系統是相當困難的。 – David

回答

0

這裏方法調用cmd1.ExecuteReader()返回SqlDataReader類型的對象的實例。

然後將此對象的引用分配給相同類型的變量readerSqlDataReader

0

reader不是方法,它是函數ExecuteReader返回的對象。

ExecuteReader將使用通常的語法new SqlDataReader(...)創建一個對象,然後返回它。就這樣 !

0

試想一下,方法做這樣的事情的極大簡化版本:

public SqlDataReader ExecuteReader() 
{ 
    return new SqlDataReader(); 
} 

顯然,實現比這更復雜的,但你可以很容易地看到一個方法調用如何返回你的對象。