ولی یک کلاس استاتیک نیست.
و سینگلتن پترن را پیاده کرده.
کلاس استاتیک نیست ولی شبیه به اون عمل میکنه.
به نظرم سینگلتن پترن هم نیست، مگر اینکه جمله زیر صحت داشته باشه! :
با اضافه شدنه کلاسهایه استاتیک نهوه پیاده کردن سینگلتن پترن در سی شارپ عوض شده ، یک کلاس استاتیک بطور اتوماتیک هدفهایه سینگلتن پترن را بر آورده میکنه. در همان لینک ویکی پدیا به این موضوع اشاره کرده.


یک Global Point برای دسترسی به آن، MessageBox.Show است.
متد Show یک Global Point به حساب نمیآد بلکه یک متد static برای اجرای عملیات حساب میشه.
تمام متدهای Show که Overload شدند، همشون استاتیک هستند و همه این متدها در داخل خود از متد private static ای بنام ShowCore استفاده کردند و در واقع همه چیز static است بجز متد سازنده که private است.

در واقع یکی از متدهای Show به شکل زیر پیاده سازی شده:

public static DialogResult Show(string text, string caption)
{
return ShowCore(null, text, caption, MessageBoxButtons.OK, MessageBoxIcon.None, MessageBoxDefaultButton.Button1, 0, false);
}


و متد ShowCore هم استاتیک است، یعنی:

private static DialogResult ShowCore(IWin32Window owner, string text, string caption, MessageBoxButtons buttons, MessageBoxIcon icon, MessageBoxDefaultButton defaultButton, MessageBoxOptions options, bool showHelp)
{
//...
}


فقط قابلیت داشتن دسترسی به کلاس سینگلتن (S) در یکجا است.
برخلاف تعریف سینگلتن پترن...
در سینگلتن پترن، قابلیت دسترسی داشتن به کلاس سینگلتن (S) از همه جا باید امکان پذیر باشه، یعنی مثلا از طریق 8 تا شیئ بشه به یک کلاس سینگلتن (S) دسترسی داشت اما، همه ی این 8 تا شیئ به یک نمونه (Singleton Object) اشاره میکنند.
اما در کلاس استاتیک نمیشه مثلا 8 تا شیئ داشت که به کلاس استاتیک اشاره کنند بلکه فقط یک شیئ میتونه به نمونه دسترسی داشته باشه و اون شیئ، خود کلاس static است. یعنی کلاس static چیزی بصورت Global Point نداره.


اگر به تعریفی که از کتاب C#‎ Design Patterns دادید نگاه کنید این محدودیت را جزو پترن تعریف نکرده.
میگه a Global Access Point و نگفته که این Global Access Point باید حتما یک پروسیجر باشه.
منم همچنین حرفی رو نزدم. نگفتم که حتما باید متد باشه، مثلا Global Point میتونه یک private FIELD باشه و البته readonly و static.
ولی متدی مثل Show، یک Global Point نمیتونه باشه، چون به نمونه ای از کلاس اشاره نمیکنه (فقط یک سری اعمال رو انجام میده).


1. اعضای داخلی private همه آنها هم استاتیک هستند، چون در متدی مثل Show نمیشه از اعضای غیر استاتیک استفاده کرد چون متد SHow یک متد static است.

2. بله، جزء تعریف نیست.

3. بله، جایی رو برای این شرط تعیین نکردند.

4. چون فقط یک شیئ وجود داره، نمیشه گفت که Singleton Pattern رو پیاده سازی کرده، کلاس static هم فقط اجازه دسترسی به یک شیئ رو امکان پذیر میسازه (یا کلاسی مثل MessageBox).

5. درسته، خوبه که اینطور باشه.

6. بله، موافقم. محدودیتهایی کلاس استاتیک داره، مثلا همین اینکه اگر کلاسی بصورت استاتیک ایجاد بشه، دیگه براحتی نمیشه اون رو به غیر استاتیک تبدیل کرد.