Hỏi về Reference variable trong c#

c-sharp

(nope) #1

Mình có đoạn code ngắn :

class Guys
{ 
    public Random Randomizer; // (1)
    public int A()
    {
        return  Randomizer.Next(100); // (3)
    }
}

class second
{
    public second()
    {
        Guys g = new Guys() { Randomizer = new Random() }; // (5) 
    }
}

các pro cho mình hỏi dòng 1 mới chỉ tạo ra variable reference mà tại sao ở dòng 3 đã có thể dùng được method bên trong cái object Random rồi nhỉ? và nếu vậy thì sao ở dòng 5 còn phải cần gán cho Randomizer cái object nhỉ? MÌnh là beginner ,có gì hỏi ngu ae thông cảm cho mình với :frowning:


(SITUVN.gcd) #2

Khi nào gọi tới mới là dùng, đoạn mã trên có chỗ nào gọi đến Guys.A() chưa? Chưa dùng.
Do trong Guys khai báo Randomizer mà chưa gán giá trị nên nó sẽ bằng null.

Khi tạo mới Guys (new Guys()) thì giá trị Randomizer = null, bởi thế mới gán luôn Randomizer = new Random() để có thể dùng được Randomizer.
Thử 2 đoạn sau nhé:

1

Guys g = new Guys();
g.A();

2

Guys g = new Guys(){ Randomizer = new Random()};
g.A();

Đoạn 1 sẽ phát sinh ngoại lệ NullPointerException (con trỏ rỗng). Do Randomizer chưa gán giá trị.
Đoạn 2 chạy bình thường.


(nope) #3

oh cảm ơn bạn nhiều :))) thông não cực mạnh ~


83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?