zkazemi
شنبه 17 مرداد 1388, 09:09 صبح
چنانچه يک کلاس پايه و يک کلاس مشتق شده از آن, داراي دو متد با مشخصه تعريف يکسان باشند (مشخصه تعريف يک متد, عبارت است از اسم متد و تعداد و نوع پارامترهاي آن), اين دو متد به هم مرتبط نيستند. به عنوان مثال چنانچه کد زير را کامپايل کنيد, با يک پيغام خطا مواجه ميشويد که به شما ميگويد IdentifierToken.Name(), Token.Name را پنهان کرده است:
class Token
{
…
public string Name () {…}
}
class IdentifierToken : Token
{
…
public string Name () {…}
}
اين اخطار به شما يادآوري ميکند که چون دو متد, مشخصه يکساني دارند و به هم مرتبط نيستند, تعريف Name در Identifier Token, متد Name در Token را مخفي ميکند. در بيشتر مواقع, اين تشابه اسمي, سبب سردرگمي ميشود و بايد نام آنها را تغيير داد. اما چنانچه بخواهيد اين دو متد, مشخصه يکساني داشته باشند, ميتوانيد با استفاده از کلمه کليدي new, از ايجاد پيغام خطا, جلوگيري کنيد:
class Token
{
…
public string Name () {…}
}
class IdentifierToken : Token
{
…
new public string Name () {…}
}
با استفاده از کلمه کليدي new به اين صورت, اين حقيقت که دو متد مذکور هنوز کاملاً به هم مربوط نيستند, تغيير نميکند و تنها باعث ميشود که ديگر پيغام خطا ظاهر نگردد.
class Token
{
…
public string Name () {…}
}
class IdentifierToken : Token
{
…
public string Name () {…}
}
اين اخطار به شما يادآوري ميکند که چون دو متد, مشخصه يکساني دارند و به هم مرتبط نيستند, تعريف Name در Identifier Token, متد Name در Token را مخفي ميکند. در بيشتر مواقع, اين تشابه اسمي, سبب سردرگمي ميشود و بايد نام آنها را تغيير داد. اما چنانچه بخواهيد اين دو متد, مشخصه يکساني داشته باشند, ميتوانيد با استفاده از کلمه کليدي new, از ايجاد پيغام خطا, جلوگيري کنيد:
class Token
{
…
public string Name () {…}
}
class IdentifierToken : Token
{
…
new public string Name () {…}
}
با استفاده از کلمه کليدي new به اين صورت, اين حقيقت که دو متد مذکور هنوز کاملاً به هم مربوط نيستند, تغيير نميکند و تنها باعث ميشود که ديگر پيغام خطا ظاهر نگردد.