PDA

نسخه کامل مشاهده نسخه کامل : اشتباه نکنید! این دو با هم یکسان نیستند



iranch
15-07-2015, 02:36
با درود و شب بخیر
متن زیر را می گوید ، هدر فایل در سی ++ با using در سی# یکی نیست. مگر در سی ++ وقتی ما

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
به این معنا نبود که مثلا من میخواهم از cout استفاده کنم و برو وصل بشو به هدر فایل iostream ؟؟؟
در سی شارپ هم میگم

برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
یعنی برو به فضای نام using تا من بتونم از کلاس ها و... استفاده کنم..

اینجا فضای نام یا هدر فایل با هم تفاوت دارند؟ در چه حد؟ مگر فضای نام using ، به صورت فیزیکی وجود ندارد؟
پس چرا گفته
The using statement does no physical linking between files


:n27::n27::n27:


[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

Msba
15-07-2015, 15:59
منظور از فیزیکی آن فیزیکی نیست. دقت کنید که include# مانند یک اتصال است. این اتصال مانند این است که تمامی محتوای فایل include شده در فایل اصلی دیده شود، به این عکس ها دقت کنید:
ابتدا یک چنین برنامه ای داریم:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
سپس با این تعریف می شود:


[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
پس در نهایت ما یک همچین چیزی برای کامپایلر داریم:

[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
اما در using مربوط به C# قضیه این طور نیست. بدون اینکه در C# نیاز باشد عمل using انجام شود،می توان از مجموعه ی دیگر استفاده کرد. در ضمن دقت کنید که کتابخانه با فضای نام متفاوت است. اگرچه در تعریف اولیه و برای فهم بهتر ممکن است این دو را نزدیک به هم تعریف کنند.
از طرفی (مجدد!) دقت کنید که فضای نام های مربوط به Net. در سیستم cache می شوند. یعنی یک سیستم که Net. در آن نصب شده است تمامی فضاهای نام ها را در سیستم دارد و متد یا ویژگی از آن ها لازم باشد از آن فایل در حالت runtime برداشت می شود که این مورد در بحث کتابخانه نیست یعنی این بخش های مورد نیاز فایل include شده می رود در درون خروجی نهایی. یکی از دلایلی هم در این زبان عمل optimization بسیار چشم گیر است همین مورد است.


[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
ما در C++ هم using داریم، چرا؟ چون namespace داریم. فضای نام ها با قالب بندی کلاس ها (گرچه در فایل های مختلف باشند) یک بخش واحد را می سازند. این درحالی است که در کتابخانه ها اینگونه نیست و همچنین در کتابخانه ما با محدودیت اسم گذاری نیز روبه رو می شویم که باز این مشکل در فضای نام وجود ندارد. اطلاعات بیشتر ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]).

موفق باشید.