Hiển thị các bài đăng có nhãn C# Keywords. Hiển thị tất cả bài đăng
Hiển thị các bài đăng có nhãn C# Keywords. Hiển thị tất cả bài đăng

Thứ Tư, 24 tháng 2, 2010

// // Leave a Comment

As Keyword C#

Bạn có thể sử dụng toán tử as để chuyển tử một kiểu này sang một kiểu khá. Nhưng nếu bạn áp dụng nó để chuyển sang một kiểu khác không tương thích, bạn sẽ nhận được exception. Lợi thế của việc sử dụng toán tử as là nó không throw ra exception. Khi một kiểu không thể chuyển đổi bằng cách sử toán tử as, nó trả về giá trị null. As cũng được sử dụng để so sánh giữa 2 kiểu với nhau.

Cú pháp sau đây sử dụng toán tử as để convert item sang string. Nếu item không thể chuyển sang được string, nó sẽ trả về giá trị null.


string stype = item as string;

Đoạn mã dưới đây là một ví dụ có sử dụng toán tử as. Đoạn mã này sẽ thử chuyển một vài lớp đối tượng sang string có mặt cả string và int.

Read More

Thứ Năm, 28 tháng 1, 2010

// // Leave a Comment

params Keyword C#

Đôi khi chúng ta có thể cần một số biến của các đối số được truyền cho một hàm. Ví dụ, chúng ta có thể yêu cầu một chức năng tổng hợp mà tính toán tổng số các số được truyền cho nó không có vấn đề có bao nhiêu con số được thông qua.

Trong C # chúng ta có thể sử dụng các từ khóa params và vượt qua không có biến của các đối số tới một hàm. Nó giống như việc sử dụng ParamArray bằng ngôn ngữ VisualBasic. Cú pháp của đối số params là:
params datatype [] tên đối số
Read More

Thứ Hai, 25 tháng 1, 2010

// // Leave a Comment

global Keyword C#

Từ khóa global này rất hữu ích trong một số ngữ cảnh để giải quyết không rõ ràng giữa định danh. Nếu bạn có một cuộc xung đột giữa một tên lớp và một không gian tên, ví dụ, bạn có thể sử dụng các từ khóa global cầu để truy cập vào không gian tên
namespace MyApp
{
public static class System
{
public static void Main()
{
global::System.Console.WriteLine("Hello, world!");
// if we had just used System.Console.WriteLine,
// the compile would think that we referred to a
// class named "Console" inside our "System" class.
}
}
}

global không làm việc trong tình huống sau đây, tuy nhiên, như lớp System của ta không có một không gian tên:

public static class System
{
public static void Main()
{
global::System.Console.WriteLine("Hello, world!");
// "System" doesn't have a namespace, so the above
// would be referring to this class!
}
}

Read More
// // Leave a Comment

readonly Keyword C#

Từ khoá readonly liên quan mật thiết đến từ khoá const, ngoại trừ một biến với lần sửa đổi này sẽ được khởi tạo trong một constructor, cùng với việc liên kết với một lớp (đối tượng) hơn là các lớp của chính nó.

Việc sử dụng chính cho các từ khoá này là để cho phép biến mất trên các giá trị khác nhau tùy theo đó nhà xây dựng đã được gọi là, trong trường hợp lớp có nhiều, trong khi vẫn đảm bảo các nhà phát triển mà nó có thể không bao giờ cố ý hoặc vô ý được thay đổi trong các mã sau khi đối tượng đã được tạo.

Đây là cách sử dụng mẫu, giả định là trong một lớp được gọi là SampleClass:

readonly string s;

SampleClass()
{
s = "Hello!";
}

Read More
// // Leave a Comment

stacklloc Keyword C#

Từ khoá stackalloc được sử dụng trong đoạn mã không an toàn unsafe để cấp phát một khối bộ nhớ trên Stack.

int* fib = stackalloc int[100];

Trong ví dụ trên, một khối nhớ có kích thước đủ để chứa 100 phần tử kiểu int được cấp phát trên Stack, không phải là heap; địa chỉ của khối này được lưu giữ trong con trỏ fib. Đây là bộ nhớ không thể thu thập rác và do đó không có pinned (cố định). Thời gian sống của bộ nhớ được giới hạn trong đời của phương thức, trong đó nó được định nghĩa( không có cách nào để giải phóng bộ nhớ trước khi phương thức kết thúc).

stackalloc chỉ có giá trị tại địa phương.

Bởi vì các con trỏ kiểu có liên quan, stacklloc yêu cầu bối cảnh không an toàn (unsafe context). Xem lại mã không an toàn và con trỏ.

stackalloc giống như _alloca trong thư viện C thời gian chạy(run-time).

Read More
// // Leave a Comment

is Keyword C#

Từ khoá is được so sánh một đối tượng, nếu chúng cùng một loại (đối tượng kế thừa kiểu), và trả về true. Do đó nó được sử dụng để kiểm tra tính tương thích, trước khi chuyển đổi kiểu nguồn sang một kiểu khác để đảm bảo rằng sẽ không gây ra một ngoại lệ nào. Sử dụng is với giá trị null luôn trả vềfalse.

Xem đoạn ví dụ sau:

System.IO.StreamReader reader = new StreamReader("readme.txt");
bool b = reader is System.IO.TextReader;

// b is now set to true, because StreamReader inherits TextReader

Read More
// // Leave a Comment

unsafe Keyword C#


Từ khoá unsafe (không an toàn) có thể được sử dụng để sửa đổi một thủ tục hay định nghĩa một khối mã trong đó sử dụng mã không an toàn. Mã không an toà là mã có sử dụng toán tử địa chỉ (&) hoặc sử dụng toán tử con trỏ (*).

Theo thứ tự để biên dịch mã có chứa từ khoá này, bạn phải sử dụng tuỳ chọn /unsafe khi sử dụng trình biên dịch Microsoft C- Sharp.


// example of unsafe to modify a procedure
class MyClass {
unsafe static void(string *msg) {
Console.WriteLine(*msg)
}
}

// example of unsafe to modify a code block
string s = "hello";
unsafe {
char *cp = &s[2];
*cp = 'a';
}
Read More
// // Leave a Comment

implicit Keyword C#

General

When values are cast implicitally, the runtime does not need any casting in code by the developer in order for the value to be converted to its new type.

Here is an example, where the developer is casting explicitly:

//Example of explicit casting.
float fNumber = 100.00f;
int iNumber = (int)fNumber;

The developer has told the runtime, "I know what I'm doing, force this conversion."

Implicit casting means that runtime doesn't need any prompting in order to do the conversion. Here is an example of this.

//Example of implicit casting.
byte bNumber = 10;
int iNumber = bNumber;

Notice that no casting was necessary by the developer. What is special about implicit, is that the context that the type is converted to is totally lossless i.e. converting to this type loses no information, so it can be converted back without worry.


Read More
// // Leave a Comment

explicit Keyword C#

General

When values are cast implicitally, the runtime does not need any casting in code by the developer in order for the value to be converted to its new type.

Here is an example, where the developer is casting explicitly:

//Example of explicit casting.
float fNumber = 100.00f;
int iNumber = (int)fNumber;

The developer has told the runtime, "I know what I'm doing, force this conversion."

Implicit casting means that runtime doesn't need any prompting in order to do the conversion. Here is an example of this.

//Example of implicit casting.
byte bNumber = 10;
int iNumber = bNumber;

Read More
// // Leave a Comment

extern Keyword C#

Từ khoá extern chỉ ra rằng phương thức được gọi tồn tại trong một thư viện DLL.

Một công cụ được gọi là "tlbimp.exe" có thể tạo ra một wrapper assambly cho phép C# tương tác với các DLL như nó đã là một thực thể .NET.

Các thư viện DLL cũ hơn sẽ không thể làm việc được với phương pháp này. Thay vào đó, bạn phải explicitally nói với trình biên dịch DLL những gì để gọi, các phương thức để gọi và những gì các tham số để pass. Kiểu tham số là rất quan trọng, bạn cũng có thể xác định các explicitally nhập các tham số được thông qua tới phương thức.

Ví dụ:

using System;
using System.Runtime.InteropServices;

namespace ExternKeyword
{
public class Program
{
static void Main()
{
NativeMethods.MessageBoxEx(IntPtr.Zero, "Hello there", "Caption here",0,0);
}
}

public class NativeMethods
{
[DllImport("user32.dll")]
public static extern MessageBoxEx(IntPtr hWnd, string lpText, string lpCaption, uint uType, short wLanguageId);
}
}

Câu lệnh [DllImport("user32.dll")] thông báo với trình dịch biết được DLL nào được tham chiếu tới. Windows tìm kiếm các tập tin như được định nghĩa bởi biến môi trường PATH environment vairable, và do đó sẽ tìm kiếm những dduouongf dẫn trước khi thất bại.

Phương thức mà ta tham chiếu tới cũng là tĩnh bởi vidf DLL không thể hiểu làm thế nào để được "tạo ra". Điều này cho phép các phương thức có thể được gọi trực tiếp, thay vì instantiated và sau đó được sử dụng.

Read More
// // Leave a Comment

using Keyword C#

Từ khoá using có hai ý nghĩa cơ bản hoàn toàn không liên quan trong C#, tuỳ thuộc vào nếu nó được sử dụng như là một chỉ thị hay một câu lệnh.

Sử dụng như một chỉ thị

"using" như là một chỉ thị để khai báo không gian tên cho việc tham chiếu.

Example:

using System;

// A developer can now type Console.WriteLine(); rather than System.Co
nsole.WriteLine().

using cũng có thể cung cấp một không gian tên bí danh (alias) cho các kiểu tham chiếu.

Example:

using Utils = Company.Application.Utilities;

Sử dụng như một câu lệnh

using sử dụng như một câu lệnh nó sẽ tự động gọi hàm Dispose() cho đối tượng cụ thể. Các đối tượng phải được thực hiện qua giao tiếp (interface) IDisposable.

Example:

using (System.IO.StreamReader reader = new StreamReader("readme.txt"))
{
// read from the file

}

// readme.txt has now been closed automatically.


Read More
// // Leave a Comment

abstract Keyword C#

Các lớp abstract (trừu tượng) là lớp chỉ chứa các khai báo các lớp và các phương thức khác.
Các phương thức này có thể được định nghĩa bên trong lớp đã được định nghĩa trừ khi chúng ta không thể tạo ra các định nghĩa. Các phương thức đó được khai báo trong một lớp abstract có thể được định nghĩa bên ngoài của lớp abstract như là một phương thức riêng lẻ.
Read More
// // Leave a Comment

struct Keyword C#

Trong C#, class được dùng để tạo phần lớn những đối tượng. Tuy nhiên, đôi khi ta muốn tạo dựng những đối tượng hoạt động tương tự như những kiểu dữ liệu bẩm sinh, ít dùng đến bộ nhớ, có thể được cấp phát nhanh và không tốn nhiều bộ nhớ do việc quy chiếu. Trong trường hợp này, ta dùng đến kiểu dữ liệu trị, thực hiện bằng cách khai báo một struct;

Struct
là kiểu dữ liệu tạo, "nhẹ cân" có thể thay thế lớp. Struct cũng tương tự như lớp, nghĩa là cấu trúc dữ liệu có thể chứa các thành viên dữ liệu và thành viên hàm (bộ khởi tạo, phương thức...)

Struct khác class ở chỗ: struct là loại dữ liệu trị, nghĩa là không được cấp phát bộ nhớ trên heap. Một biến struct sẽ chứa dữ liệu của struct, trong khi một biến kiểu class thì lại chứa một quy chiếu về dữ liệu được biết như là đối tượng. Ngoài ra, struct không hỗ trợ kế thừa và hàm hủy.

Struct chỉ hữu ích đối với những đối tượng không đòi hỏi ý nghĩa quy chiếu. Ví dụ, các số phức, các điểm trên hê thống, hoặc cặp key - value trong cấu trúc từ điển.

Khai báo Struct:

Cú pháp khai báo như sau:
[thuộc tính] [bổ sung truy cập] struct :[danh sách giao diện] [thành viên struct]
{
// thuộc tính, phương thức,...
}


Read More
// // Leave a Comment

object Keyword C#

Từ khoá object được sử dụng trong trường, phương thức, thuộc tính, khai báo biến và các toán tử cast, typeof như một bí danh cho các cơ cấu .NET Framework. 'System.Object'. Nghĩa là, nó đại diện cho lớp cơ sở mà từ đó tất cả các kiểu tham chiếu khác lấy được. Trên một số nền tảng, kích thước tham chiếu là 32 bit, trong khi trên nền tảng khác nó là 64 bit.
Read More
// // Leave a Comment

Lock keyword C#



The lock keyword allows a section of code to exclusively use a resource, a feature useful in multi-threaded applications. If a lock to the specified object is already held when a piece of code tries to lock the object, the code's thread is blocked until the object is available.

// Từ khoá "lock" cho phép một đoạn mã độc quyền sử dụng một nguồn tài nguyên, một đặc tính trong ứng dụng đa luồng. Nếu một khoá (lock) quy định đối tượng đã chiếm giữ khi mà đoạn mã đang khoá đối tượng, thread của đoạn mã bị chặn cho đến khi các đối tượng có giá trị.


using System;
using System.Threading;


class LockDemo
{
private static int number = 0;

private static object lockObject = new object();


private static void DoSomething()
{
while (true)

{
lock (lockObject)
{
int originalNumber = number;


number += 1;
Thread.Sleep((new Random()).Next(1000)); // sleep for a random amount of time

number += 1;
Thread.Sleep((new Random()).Next(1000)); // sleep again


Console.Write("Expecting number to be " + (originalNumber + 2).ToString());

Console.WriteLine(", and it is: " + number.ToString());
// without the lock statement, the above would produce unexpected results,

// since the other thread may have added 2 to the number while we were sleeping.
}
}
}

public static void Main()

{
Thread t = new Thread(new ThreadStart(DoSomething));


t.Start();
DoSomething(); // at this point, two instances of DoSomething are running at the same time.
}

}


The parameter to the lock statement must be an object reference, not a value type:

// Tham số của lock là một đối tượng tham chiếu, không phải là kiểu giá trị:


class LockDemo2
{
private int number;

private object obj = new object();

public void DoSomething()

{
lock (this) // ok
{
...
}


lock (number) // not ok, number is not a reference
{
...
}

lock (obj) // ok, obj is a reference

{
...
}
}
}









Read More