2017-01-11 23 views
10

Tôi không biết nếu điều này là dễ dàng không ai đang tìm kiếm điều đó, nhưng tôi đã không tìm thấy bất cứ điều gì ...giá trị Gán trực tiếp đến biến lớp

Tôi muốn làm như sau:

public class foo 
{ 
    string X 
    { 
     get; 
     set 
     { 
      //set and do some other stuff 
     } 
    } 

    //some other functions 
} 

chính:

private foo = new foo(); 

foo = "bla"; 

Làm thế nào tôi có thể gán này bla TRỰC TIẾP đến đẳng cấp biến foo mà không sử dụng foo.X = "bla"?

Các kiểu dữ liệu hoạt động như thế nào, ví dụ: chuỗi? Chúng được tạo ra như thế nào? Vì tôi có thể làm string y; y = "abc"?

+0

Bạn sẽ phải ghi đè toán tử gán '='. Nhưng tại sao bạn muốn làm điều đó? – Prajwal

+3

Chuỗi có thể làm điều đó vì '" abc "' * là * một chuỗi. Cũng giống như bạn có thể gán đối tượng của loại X vào một biến loại X. –

+0

@SamiKuhmonen Không bao giờ nghĩ về nó, điều này hoàn toàn có ý nghĩa .... – Dominik

Trả lời

21

Bạn đang tìm kiếm toán tử ngầm?

public class foo { 
    string X { 
    get; 
    set; 
    } 

    public static implicit operator foo(string value) { 
    return new foo() { 
     X = value 
    }; 
    } 
} 

Xin vui lòng, thông báo, rằng không có cuộc gọi constructor đây đó sẽ được gọi là (và do đó tạo ra một trường hợp foo mới) ngầm:

private foo myFoo = "bla"; 
+6

Lưu ý rằng điều này tạo ra một thể hiện * mới * 'foo' và gán hoàn toàn thay thế đối tượng cũ. Vật thể cũ đặc biệt không có cách nào để biết rằng nó đang được thay thế theo cách đó. – poke

+0

Chính xác - cảm ơn bạn! – Dominik

-2

Tôi nghĩ bạn có nghĩa là:

private foo = new foo(); 
foo.X = "bla"; 

Không? Vì vậy, điều này sẽ là:

private foo = new foo() { 
    X = "bla" 
}; 

Và X cần được công khai. Tôi có hiểu bạn đúng không?

+3

Đây chính xác là những gì OP * không * có ý nghĩa. –

Các vấn đề liên quan