2012-05-23 66 views
7

Trong C#, có thể khai báo một lớp hoặc cấu trúc bên trong một phương thức, như trong C++ không?Khai báo một lớp hoặc cấu trúc bên trong một phương thức trong C#

ví dụ: C++:

void Method() 
{ 
    class NewClass 
    { 
    } newClassObject; 
} 

Tôi đã thử nhưng không cho phép tôi làm như vậy.

+4

Bạn nên được phép làm như vậy trong một ** class **, nhưng không phải bên trong ** method **. Chính xác thì bạn đã thử cái gì? – mattytommo

+0

Chủ đề của bạn nói "bên trong phương pháp", nhưng trong bài viết của bạn, bạn nói "bên trong lớp". Vui lòng chỉnh sửa cái này hoặc cái kia để mục tiêu của bạn rõ ràng. – logicnp

+3

tiêu đề yêu cầu một câu hỏi khác cho cơ thể câu hỏi. Sự khác biệt là quan trọng. Xin vui lòng làm rõ cho dù bạn có nghĩa là "bên trong một phương pháp" (tiêu đề) vs "bên trong một lớp" (cơ thể) –

Trả lời

7

Bạn có thể tạo một loại vô danh như vậy:

var x = new { x = 10, y = 20 } 

nhưng khác hơn là: không có.

+2

Đây là một đối tượng, không phải là một lớp học. – WojtekT

+5

Có và không. x là một biến, nhưng kiểu (ẩn danh) được trả về bởi x.GetClass() là một lớp. – erikkallen

+0

Đó là sự thật. Tôi cho rằng câu hỏi là về việc định nghĩa một lớp. – WojtekT

3

Bạn có thể khai báo bên trong một lớp như bang câu hỏi của bạn, nhưng không phải bên trong một phương pháp như các quốc gia tiêu đề câu hỏi của bạn. Một cái gì đó như:

public class MyClass 
{ 
    public class MyClassAgain 
    { 
    } 

    public struct MyStruct 
    { 
    } 
} 
7

Vâng, chúng ta có thể khai báo một class bên trong một class và chúng được gọi là inner classes

public class Foo 
{ 
    public class Bar 
    { 

    } 
} 

và điều này làm thế nào bạn có thể tạo ra một thể hiện

Foo foo = new Foo(); 
Foo.Bar bar = new Foo.Bar(); 

Và trong một phương pháp bạn có thể tạo một đối tượng của anonymous loại

void Fn() 
{ 
var anonymous= new { Name="name" , ID=2 }; 
Console.WriteLine(anonymous.Name+" "+anonymous.ID); 
} 
Các vấn đề liên quan