หมายความว่าอย่างไรเมื่อคุณเพิ่มคำหลักแบบคงที่ให้กับวิธีการ
public static void doSomething(){
//Well, do something!
}
คุณสามารถเพิ่มstatic
คำหลักลงในคลาสได้หรือไม่ ถ้าเช่นนั้นจะหมายความว่าอย่างไร
หมายความว่าอย่างไรเมื่อคุณเพิ่มคำหลักแบบคงที่ให้กับวิธีการ
public static void doSomething(){
//Well, do something!
}
คุณสามารถเพิ่มstatic
คำหลักลงในคลาสได้หรือไม่ ถ้าเช่นนั้นจะหมายความว่าอย่างไร
คำตอบ:
static
ฟังก์ชั่นที่แตกต่างจากปกติ ( ตัวอย่าง ) ฟังก์ชั่นไม่เกี่ยวข้องกับอินสแตนซ์ของระดับชั้น
static
ชั้นเป็นชั้นซึ่งสามารถมีstatic
สมาชิกและดังนั้นจึงไม่สามารถ instantiated
ตัวอย่างเช่น:
class SomeClass {
public int InstanceMethod() { return 1; }
public static int StaticMethod() { return 42; }
}
ในการโทรติดต่อInstanceMethod
คุณต้องการอินสแตนซ์ของคลาส:
SomeClass instance = new SomeClass();
instance.InstanceMethod(); //Fine
instance.StaticMethod(); //Won't compile
SomeClass.InstanceMethod(); //Won't compile
SomeClass.StaticMethod(); //Fine
จากมุมมองอื่น: พิจารณาว่าคุณต้องการเปลี่ยนแปลงบางอย่างในสายอักขระเดียว ตัวอย่างเช่นคุณต้องการสร้างตัวอักษรตัวพิมพ์ใหญ่และอื่น ๆ คุณสร้างคลาสอีกชื่อว่า "เครื่องมือ" สำหรับการกระทำเหล่านี้ ไม่มีความหมายในการสร้างอินสแตนซ์ของคลาส "เครื่องมือ" เนื่องจากไม่มีเอนทิตีใด ๆ ในชั้นเรียนนั้น (เปรียบเทียบกับคลาส "บุคคล" หรือ "ครู") ดังนั้นเราจึงใช้คีย์เวิร์ดแบบคงที่เพื่อใช้คลาส "เครื่องมือ" โดยไม่ต้องสร้างอินสแตนซ์ใด ๆ และเมื่อคุณกดจุดหลังชื่อคลาส ("เครื่องมือ") คุณสามารถเข้าถึงวิธีที่คุณต้องการ
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Tools.ToUpperCase("Behnoud Sherafati"));
Console.ReadKey();
}
}
public static class Tools
{
public static string ToUpperCase(string str)
{
return str.ToUpper();
}
}
}
วิธีการแบบคงที่เขตข้อมูลทรัพย์สินหรือเหตุการณ์สามารถเรียกได้บนคลาสแม้ว่าไม่มีอินสแตนซ์ของคลาสที่ถูกสร้างขึ้น หากอินสแตนซ์ของคลาสใดถูกสร้างขึ้นจะไม่สามารถใช้เพื่อเข้าถึงสมาชิกแบบสแตติก มีสำเนาของเขตข้อมูลและเหตุการณ์เพียงหนึ่งสำเนาเท่านั้นและวิธีการและคุณสมบัติแบบคงที่สามารถเข้าถึงเขตข้อมูลแบบคงที่และเหตุการณ์แบบคงที่เท่านั้น สมาชิกแบบสแตติกมักใช้เพื่อแสดงข้อมูลหรือการคำนวณที่ไม่เปลี่ยนแปลงในการตอบสนองต่อสถานะวัตถุ ตัวอย่างเช่นห้องสมุดคณิตศาสตร์อาจมีวิธีการคงที่สำหรับการคำนวณไซน์และโคไซน์ สมาชิกคลาสแบบสแตติกถูกประกาศโดยใช้คีย์เวิร์ด static ก่อนชนิดการส่งคืนของ membe
ฟังก์ชั่นแบบคงที่หมายความว่ามันเกี่ยวข้องกับคลาส (ไม่ใช่อินสแตนซ์เฉพาะของคลาส แต่เป็นคลาสเอง) และสามารถเรียกใช้ได้แม้ว่าจะไม่มีอินสแตนซ์ของคลาสอยู่
คลาสแบบสแตติกหมายถึงคลาสนั้นมีสมาชิกแบบสแตติกเท่านั้น
ไม่นานคุณจะไม่สามารถยกตัวอย่างคลาสสแตติกได้: Ex:
static class myStaticClass
{
public static void someFunction()
{ /* */ }
}
คุณไม่สามารถทำสิ่งนี้:
myStaticClass msc = new myStaticClass(); // it will cause an error
คุณสามารถทำได้เพียง:
myStaticClass.someFunction();
เมื่อคุณเพิ่มคีย์เวิร์ด "สแตติก" ให้กับเมธอดหมายความว่าการใช้งานต้นแบบจะให้ผลลัพธ์เดียวกันสำหรับอินสแตนซ์ของคลาสใด ๆ จำเป็นต้องพูดผลลัพธ์ขึ้นอยู่กับการเปลี่ยนแปลงในค่าของพารามิเตอร์
ตัวแปรสแตติกไม่เชื่อมโยงกับวัตถุของคลาส สามารถเข้าถึงได้โดยใช้ classname วัตถุทั้งหมดของชั้นเรียนจะใช้ตัวแปรแบบคงที่
โดยการทำให้ฟังก์ชั่นเป็นแบบคงที่มันจะ จำกัด การเข้าถึงฟังก์ชั่นภายในไฟล์นั้น
แกนหลักของคำสำคัญคงที่คุณจะมีเพียงสำเนาเดียวที่RAMของนี้ (วิธี / ตัวแปร / คลาส) ที่ใช้ร่วมกันสำหรับการโทรทั้งหมด
คำสำคัญคงที่เมื่อนำไปใช้กับชั้นเรียนบอกคอมไพเลอร์ในการสร้างอินสแตนซ์เดียวของชั้นเรียนนั้น มันเป็นไปไม่ได้ที่จะ 'ใหม่' หนึ่งหรือมากกว่าหนึ่งอินสแตนซ์ของชั้นเรียน วิธีการทั้งหมดในคลาสสแตติกต้องประกาศตัวเองแบบสแตติก
เป็นไปได้และมักเป็นที่ต้องการเพื่อให้มีวิธีการคงที่ของคลาสที่ไม่คงที่ ตัวอย่างเช่นวิธีการจากโรงงานเมื่อสร้างอินสแตนซ์ของคลาสอื่นมักจะประกาศเป็นสแตติกเนื่องจากหมายความว่าไม่จำเป็นต้องใช้อินสแตนซ์เฉพาะของคลาสที่มีเมธอดแฟกเตอร์
สำหรับคำอธิบายที่ดีว่าอย่างไรเมื่อไรและที่ไหนจะเห็นMSDN
static
ชั้นจะมีอินสแตนซ์ที่ไม่ทั้งหมด