30/09/2018, 18:12
Từ khóa static trong c# được dùng trong trường hợp nào?
Mọi người cho em hỏi , khóa static trong c# được dùng trong trường hợp nào và static dùng để làm gì ? Lúc trước có học static trong c++ mà không kĩ nên giờ nhờ các anh chỉ giúp
Cảm ơn mấy a
Bài liên quan
Từ khóa static được dùng để khai báo biến static hoặc static method hoặc static class.
Biến static có vùng nhớ riêng, không bị thay đổi, tham khảo câu trả lời này
static method là hàm nằm trong class, mà khi gọi nó ta không cần phải khai báo một biến kiểu class đó mà có thể gọi ngay. Ví như String.Compare
Class static là class mà chỉ có thể có có static method mà thôi
a nói không bị thay đổi nghĩa là sao ? giá trị của biến static là 1 const?
Anh nói vùng nhớ không bị thay đổi chứ không phải giá trị của nó.
Giá trị của nó thay đổi nhưng vùng nhớ sẽ không bị thay đổi, các topic về static có khá nhiều nên anh không muốn lập lại (lười ^^), em đọc topic anh dẫn ở trên nhé.
nói đơn giản là static method tương đương với function, có thể gọi mà ko cần object nào hết.
biến static cũng vậy, ko thuộc 1 object nào hết. Nó thuộc về class chứa nó. Có thể coi class ở đây là 1 namespace.
Vậy mình dùng static để làm gì bạn ? có thể nói rõ hơn được không
bạn thích viết hàm mà ko phụ thuộc vào object nào hết thì đặt là static.
ví dụ class TinhToan có phương thức
public int Cong(int, int);
Nếu bạn muốn xài phương thức này thì phải có 1 object TinhToan, ví dụ gọi là
TinhToan tt = new TinhToan();
rồi gọitt.Cong(1, 2);
mới xài được. Ở đây tạo object hơi thừa vì với bất kì object nào của class TinhToan thì hàm Cong() cũng như nhau cả, vậy cần tạo 1 object giả làm gì. Thêm từ khóa “static” vàopublic static int Cong(int, int);
thì ko cần tạo object giả làm gì nữa, gọi
TinhToan.Cong(1, 2);
là đượccòn phương thức tùy vào object mà ra kết quả khác nhau thì ko xài static. Ví dụ class SoNguyen có phương thức Cong(int), gọi
mot.Cong(2);
ra kết quả khác vớihai.Cong(2)
thì xài phương thức bình thường ko cóstatic
Bổ sung thêm câu trả lời của @tntxtnt, nhất là khi bạn muốn viết các hàm tiện ích, bạn có thể tạo một static class Utility và khai báo các hàm của nó ở dạng static, khi nào cần dùng thì gọi Utility ra và dùng luôn.
nó giống như là viết hàm có namespace trong C++ vậy. Tại C# hay Java ko có function nên xài static method thế.
ví dụ viết class Math, có phương thức Abs, Sqrt, Cos, Sin, Tan, v.v… thì tất cả là static method hết, vì mấy hàm này đâu phụ thuộc vào object nào.
A noi chỗ này em không hiểu lắm “class SoNguyen có phương thức Cong(int), gọi
mot.Cong(2);
ra kết quả khác vớihai.Cong(2)
thì xài phương thức bình thường ko có static”Đối vs trường hợp đó dùng static cung được mà ?
mot.Cong(2) cho ra kết quả là 3, hai.Cong(2) cho ra 4. Hơn nữa phương thức Cong() này của class SoNguyen có truy cập thuộc tính
value
của object nên ko thể xàistatic
được. static method ko biết thuộc tính của object nào hết.Đã hiểu cảm ơn a
Theo như em đọc ở đây thì static class còn khác ở một chỗ nữa là không tạo được đối tượng của static class (không
new
nó được).https://msdn.microsoft.com/en-us/library/79b3xss3.aspx
Từ khóa static dung trong C# ở các trường hợp sau:
1.Khai báo class
static dung khi khai báo class xác định class đó là tĩnh, không thể tạo được đối tượng từ class loại này.
Khi khai báo static cho class thì yêu cầu tất cả biến, hàm trong class cũng phải là static.
static class thường dung trong việc lưu các thong tin dung chung cho toàn bộ ứng dung.
2. Khai báo biến, hàm, property…
Xác định một hàm, biến là tĩnh. Hàm và biến loại này không sinh ra cùng đối tượng. Có thể truy cập trực tiếp thong qua tên class. Thường sử dung trong việc tạo biến, hàm, property… mang giá trị đồng nhất, hoặc hỗ trợ xử lý giữa các đối tượng cùng loại.
tĩnh : Chỉ có 1 reference duy nhất trong ứng dung, không có cái thứ 2.
ai có thể giải thích vì sao cái trên thì cần dùng static còn cái dưới thì ko
ps: đây là khai báo biến trong 1 class có tên là DataService( cái lớp để kết nối csdl, báo lỗi, update dl…) khi code 1 form thì lấy cái lớp này ra để kết nối.
ở đây đang khai báo chuỗi kết nối, chuổi này là không thay đổi và được dùng xuyên suốt trong ứng dụng của bạn nên nó sẽ là static để khi dùng không cần phải instance of class
còn chỗ này thì với mỗi được kết nối sẽ lấy Data khác nhau nên không cần static
@xn–tr-ojatntxtnt e vẫn chưa hiểu tt.Cong(1, 2); cũng sẽ cho ra kết quả khác nhau chứ ạ, sao a lại kết luận là giống nhau ạ? ví dụ tt.Cong(1, 2); sẽ khác tt.Cong(1, 3); !!!
ps: a có thể cho e email của a đc ko ạ . email của e là kingdoanh24@gmail.com
cái ví dụ
tt.Cong(1, 2);
là ví dụ cho hàm ko phụ thuộc vào object nào thì nên xàistatic
. Có lẽ nên đặt tên lại là hàm Tổng cho dễ hiểu chứ viết “Cộng” dễ gây hiểm lầm:tt.Tong(1, 2);
.nếu hàm Tổng không phải là static method:
nếu Tổng là static method:
gọn đẹp hơn
còn khi nào viết phương thức mà buộc phải cần tới member thuộc object nào đó thì mới xài phương thức bình thường non-static