PDA

View Full Version : سوال: Console کلاس بدون شی؟



irpersian20
سه شنبه 25 تیر 1392, 00:36 صبح
سلام

ما برای چاپ از کلاس console متود write بهره میبریم.
اما ما بدون ایجاد شی نمیتوانیم به اعضا و متد های ان کلاس دسترسی داشته باشیم.
پس چطور است مستقیم میشود از کلاس کنسول بدون ایجاد شی استفاده کرد؟

esafb52
سه شنبه 25 تیر 1392, 00:38 صبح
دوست عزیز برای کلاس های استاتیک نیاز به ایجاد شی نمی باشد
مثلا
using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication51
{
public static class test
{

public static void testmethod()
{

Console.WriteLine("test");
}
}
class Program
{
static void Main(string[] args)
{
test.testmethod();
}
}
}

irpersian20
سه شنبه 25 تیر 1392, 00:42 صبح
سلام
برای ایجاد کلاس استاتیک باید چه کار کرد

esafb52
سه شنبه 25 تیر 1392, 00:44 صبح
ویرایش کردم و یه نمونه مثال برات نوشتم

irpersian20
جمعه 18 مرداد 1392, 00:40 صبح
سلام
ما اگر کلمه کلیدی static رو از قبل از کلاس هم برداریم و تنها متد اساتاتیک باشد.کفایت میکند.فرقش چیست؟

esafb52
جمعه 18 مرداد 1392, 00:55 صبح
دوست عزیز به قول جناب افشاری "خوبه خودتون هم تست کنین و یه ذره قدرت تحلیلتون بره بالا !"
خب یک کلاس ایجادکن و.................
شما کدت رو بنویس بچه ها هم هرجاشو نگرفتی بهت توضیح میدن
موفق باشی رفیق

irpersian20
جمعه 18 مرداد 1392, 01:11 صبح
دوست عزیز تست کردم اتفاقا.چون دیدم فرق نکرد .اومدم پرسیدم.

esafb52
جمعه 18 مرداد 1392, 02:02 صبح
من اینو نوشتم شما ببین چی از برداشت میکنی
خروجی رو دقت کن و همچنین متدها رو
using System;

namespace staticexampel
{
public class test
{
class MyClass2
{
public static void test3 (string name)
{
Console.WriteLine("the name is {0}", name);

}

}
public class MyClass
{

public static void test2(string name)
{
Console.WriteLine("the name is {0}", name);

}

}

public static void test1(string name)
{
Console.WriteLine("the name is {0}",name);

}

static void Main(string[] args)
{
test1("esa");
test.MyClass.test2("esa");
MyClass2.test3("irpersian20");
Console.ReadKey();
}
}



}

irpersian20
جمعه 18 مرداد 1392, 02:24 صبح
سلام
منظور من این نبود.
من این رو گفتم.

class Class2
{
public static int ta()
{
return 2;
}
}



static class Class2
{
public static int ta()
{
return 2;
}
}

esafb52
جمعه 18 مرداد 1392, 02:54 صبح
خب دوست عزیز من این مثال رو زدم باز به فرض داشتن این کلاس
using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication20
{
class Class1

{
public static int t(int a)
{
return a;
}


}
static class class2
{
public static int t(int a)
{
return a;
}

}
}


ما این خروجی داریم
using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication20
{
class Program
{

static void Main(string[] args)
{

Console.WriteLine(Class1.t(10));
Console.WriteLine(class2.t(20));
Console.ReadKey();
}
}
}

mmd2009
جمعه 18 مرداد 1392, 02:58 صبح
با سلام

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

یکی از ویژگی های استفاده از کلاس های استاتیک این است که شما نیازی به ایجاد نمونه از اون کلاس ندارید و به راحتی میتوانید با استفاده از نام کلاس ، به اعضای اون دسترسی داشته باشید ولی این نکته رو به یاد داشته باشید که شما زمانی که یک کلاس را به صورت استاتیک تعریف می کنید ، نمیتوانید اعضای اون رو به صورت غیراستاتیک تعریف کنید ، به مثل زیر دقت کنید :


public static class Test_StaticClass
{
public void GetDate() { }
public int Age;
public string FullName { get; set; }
}


method ها ، field ها و property های تعریف شده در بالا توسط کامپایلر خطا در نظر گرفته می شوند

و همینطور این رو هم در نظر داشته باشید که اگر یک کلاس رو غیر استاتیک تعریف کنید ، و درون ان یک متد استاتیک تعریف کنید شما تنها به اعضایی از کلاس دسترسی دارید که در سطح کلاس تعریف شده باشند :


public class Test_StaticClass
{
public static string GetName()
{
return FullName;
}
public string FullName;
}


در مثال بالا متغیر FullName در به صورت استاتیک در سطح کلاس تعریف نشده است و اصلا حافظه ای به اون اختصاص داده نشده است ، ولی اگر همون متغیر FullName رو به صورت استاتیک تعریف کنید به دلیل اینکه حافظه بهش اختصاص داده می شود شما میتونید در متد GetName از اون استفاده کنید

همونطور که میدونید بخشی از حافظه رم رو همین متغیر ها و متد های استاتیک پر می کنند که این بخش در قسمت Heap قرار داره و این رو هم یادوار بشم ، کلا دلیل استفاده از یک کلاس استاتیک اینه که ما بخش های پرکاربرد خودمون رو در اون قرار بدیدم و هر بار از اونها استفاده بکنیم تا دیگه نیازی نباشه هر بار یک نمونه از اونهارو ایجاد بکنیم

یک نکته دیگه رو هم بگم که کلاس های استاتیک sealed هستند یعنی به صورت پیش فرض طوری هستند که قابل ارث بردن نیستند.

موفق باشید