1. Trang chủ
  2. » Công Nghệ Thông Tin

Lập trình Windows - Lập Trình C #- Lập Trình C Shap - Chương 2: Basic C# potx

111 1,1K 1
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 111
Dung lượng 3,77 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Cấu trúc chương trình C#• Phần chú thích option • Phần khai báo dùng namespace option • Phần định nghĩa namespace và lớp // Chương trình C# đầu tiên static void Main string [] a

Trang 1

Chương 2 C# Language Fundamentals

Trang 2

Nội dung

• Cách viết 1 console application

– Console I/0 và lệnh nhập xuất

• Khai báo biến:

– Strongly type

– Implicited type local variable

• Các kiểu dữ liệu

– Value type

– Reference type

Trang 3

Nội dung (tt)

• Chuyển đổi kiểu

• Boxing and unboxing

• Tham số ref, out, param

• Lệnh lặp for, while, do while, foreach

• Lệnh phân nhánh switch, lệnh nhảy

• Các kiểu dữ liệu phức:

Trang 4

Visual studio 2008 environment

• Là một môi trường lập trình nhiều công cụ

(tool-rich programming environment) chứa mọi tính năng cần thiết để tạo các dự án C# từ nhỏ đến lớn

Trang 7

Ứng dụng console C# đầu tiên

// Chương trình C# đầu tiên

static void Main( string [] args)

{

Console Write( "Hello World!" );

Console ReadLine();

}

Trang 8

Cấu trúc chương trình C#

• Phần chú thích (option)

• Phần khai báo dùng namespace (option)

• Phần định nghĩa namespace và lớp

// Chương trình C# đầu tiên

static void Main( string [] args){ {

Console Write( "Hello World!" );

Console ReadLine();

}

Trang 9

Câu lệnh (Statement)

• Các câu lệnh được viết trong thân của phương thức (method)

• Thực hiện một công việc nào đó

• Kết thúc bởi dấu chấm phẩy (;)

namespace HelloWorld

{

class Program {

static void Main( string [] args)

{

Console Write( "Hello World!" );

Console ReadLine();

} }

Các câu lệnh

Phương thức Main

Trang 10

static void Main( string [] args)

{

Console Write( "Hello World!" );

Console ReadLine();

}

Trang 11

Chú thích

• Chú thích (comment) được dùng để giải thích về chương trình và các câu lệnh

• Giúp cho chương trình dễ hiểu hơn

• Được bỏ qua khi biên dịch

• Không ảnh hưởng tới kết quả thực thi của

chương trình

• Có thể phát sinh ra documentation của chương trình qua chú thích XML

Trang 12

Hai cách tạo chú thích cơ bản

• Gõ phần chú thích sau cặp ký tự //

• Gõ phần chú thích giữa cặp ký tự /* và */

/* Chương trình C# đầu tiên

In ra câu chào "Hello World" */

using System;

namespace HelloWorld {

class Program {

static void Main(string[] args) {

Console.Write("Hello World!"); // Xuất ra câu chào

Console.ReadLine(); // Chờ nhấn Enter

}

Trang 13

XML Comment

• Cho phép phát sinh ra sưu liệu dạng XML

• Thích hợp cho việc viết sưu liệu của dự án lớn

• Chú thích XML bắt đầu với triple slash (“///”) và các tag của XML

• Chú thích XML dùng cho

– User defined types

– Class, delegate, enum and struct

– Member of user defined types

Trang 14

Ví dụ: ứng dụng CONSOLE đơn giản

Trang 15

Using Namespace

• Để giải quyết vấn đề xung đột tên

(name-crashing) nên tạo 1 container có đặt tên

Trang 16

Using Namespace

• Các class trong NET framework cũng được sắp xếp vào các namespace khác nhau.

• Ví dụ: lớp Console thuộc namespace System

• Để tham chiếu đến 1 lớp nào đó, có thể dùng

tên đầy đủ:

Namespace.ClassName Hoặc để tránh phải viết đầy đủ tham chiếu đến

chương trình

Trang 17

Using Namespace

• Bốn namespace thông dụng hay được dùng

trong các chương trình sẽ được Visual Studio tự động đưa vào đầu mỗi chương trình mới

Trang 18

File program.cs

• Một chương trình đơn giản nhất bao gồm: 1 file program.cs, trong file có 1 namespace mặc

định và 1 class

• Class: phải có tối thiểu 1 hàm Main

static void Main(string[] args)

{

}

Trang 20

Tính năng IntelliSense của IDE

• Tự động hiển thị danh sách các thành phần

của class khi lệnh được gõ vào cửa sổ soạn

thảo

• C# sẽ hiển thị thành phần (member) phù hợp với các ký tự đang được gõ vào, sau đó hiển thị tool tip chứa mô tả tính năng của thành

phần

Trang 21

Console I/O

• Để đọc ký tự văn bản từ cửa sổ console

– Console.Read() giá trị trả về là int

– Console.ReadLine() giá trị trả về là string

• Để xuất chuỗi ký tự dùng

– Console.Write() / Console.WriteLine()

Trang 22

Printing on the Console

• Để định dạng văn bản xuất ra:

Console.WriteLine( "{0}\n{1}",

"Welcome to", "C# Programming!" );

Đối số chứa chuỗi định dạng

Trang 24

Ký tự định dạng chuỗi

Trang 26

Console I/O

• Console.WriteLine()

Trang 28

C# Is a strongly Typed Language

• C# là một ngôn ngữ được kiểm soát chặt chẽ về mặt kiểu dữ liệu

• Mỗi biến (variable) và đối tượng (object

instance) trong hệ thống phải được xác định kiểu tường minh (well-defined type)

• Cho phép compiler dễ dàng kiểm tra được tính hợp lệ các phép toán trên các biến và đối

tượng

Trang 29

Khai báo biến

• Khai báo biến theo 2 dạng:

Trang 30

Variable name

• Hai quy tắc:

➤Ký tự đầu phải là chữ cái (letter) hoặc dấu _ hoặc

@.

➤ Các ký tự tiếp theo có thể là chữ cái, _ hay số

• Phân biệt CHỮ HOA và chữ thường

• Phải khác với từ khóa (dùng “@” khắc phục)

Trang 31

Gán giá trị biến

Trang 32

Phạm vi biến

• Phạm vi (scope)

– Được xác định bởi cặp dấu { và }

– Có thể chứa phạm vi nhỏ hơn

• Vị trí khai báo biến

– Trong thân phương thức: biến cục bộ

– Trong thân lớp(trong class): thuộc tính

• Biến trong C# chỉ có tác dụng trong phạm vi

mà nó được khai báo

Trang 33

Các từ khóa trong C# 2005

Trang 34

Data types

• There are two kinds of data types in C#

– Value Types (implicit data types, structs and enumeration)

– Reference Types (objects, delegates)

Trang 36

Reference types

• Biến loại tham chiếu chứa địa chỉ bộ nhớ chứa dữ liệu mà biến tham chiếu đến

Trang 39

Implicit data types

• Mỗi kiểu dữ liệu ngầm định đều được ánh xạ thành một kiểu tương ứng trong Common

Type System (CTS) và CLS (Common Language Specification)

Trang 40

Các kiểu dữ liệu ngầm định trong C#

Trang 41

Các kiểu dữ liệu ngầm định trong C#

Trang 42

Bộ nhớ máy tính được tổ chức như thề nào?

• Hệ điều hành chia bộ nhớ thành 2 chunk khác nhau, mỗi chunk được quản lý theo 1 cách

khác nhau

– Stack

– Heap

Trang 43

Value types và reference types

• Tất cả loại tham trị (value) đều được tạo trên stack

• Tất cả loại tham biến (reference) đều được tạo trên heap

– Nhưng con trỏ tham chiếu (reference pointer) thì nằm trên stack.

Trang 46

• A stack is a data structure that store items in a

first in first out (FIFO) fashion It is an area of memory supported by the processor and its

size is determined at the compile time

Trang 47

• A heap consists of memory available to the

program at run time Reference types are

allocated using memory available from the

heap dynamically (during the execution of

program) The garbage collector searches for non-referenced data in heap during the

execution of program and returns that space

to Operating System

Trang 48

Value type vs Reference type

Trang 50

• Ưu điểm

– Chương trình dễ đọc, khắc phục những con số

“magic number” trong code.

– Chương trình dễ sửa hơn.

– Tránh lỗi dễ dàng hơn, trình biên dịch sẽ báo lỗi

nếu gán lại giá trị cho hằng

Trang 51

• Minh họa sử dụng hằng Định nghĩa hằng

Constant

Trang 52

const: phải được gán giá trị khi khai báo

readonly: ko cần khởi tạo trước, khi gán giá trị thì sau đó ko thay đổi được

Chưa được khởi gán

Ko được thay đổi

Trang 53

Implicitly Typed Local Variables

“In C#, every variable declared in the code must have an explicit type associated with it But sometimes, when writing code for strongly typed languages, the amount of typing needed

to declare such variables can be tedious…”

Trang 54

Biến loại suy diễn Type inference

• var là từ khóa mới trong C# 3.0

• Cách khai báo:

var <varName>=<value>;

• Biến <varName> có loại ngầm định là loại của value

• Ví dụ: var myVar = 5;

 myVar là biến loại int

Trang 55

var newValue; // emits error CS0818

var a = 2, b = 1;

var x, y = 4;

Not permited

Trang 56

Chuyển đổi kiểu dữ liệu Type Conversion (cast)

• Nhiều lúc cần chuyển đổi dữ liệu cho các instances sang 1 loại dữ liệu khác

• Có 2 dạng chuyển đổi

– Implicit cast

– Explicit cast

Trang 57

Implicit cast

• Tuân theo promotion rules

– chỉ có phép chuyển kiểu nào mà không làm mất dữ liệu thì mới được phép

• Do C# tự thực hiện

• Không cần lập trình viên can thiệp

Trang 58

Implicit type cast

• Xảy ra khi

– Ép từ kiểu nhỏ qua kiểu lớn

– Ép từ lớp dẫn xuất qua lớp cơ sở

double x = i;

string s = "Hello";

object o = s;

Trang 59

Implicit type-cast

sbyte short, int, long, float, double, decimal

byte short, ushort, int, uint, long, ulong, float, double, decimal

short int, long, float, double, decimal

ushort int, uint, long, ulong, float, double, decimal

int long, float, double, decimal

uint long, ulong, float, double, decimal

long, ulong float, double, decimal

float double

char ushort, int, uint, long, ulong, float, double, decimal

Trang 60

Explicit type-cast

• Do lập trình viên chỉ định

• Xảy ra khi

– Ép từ kiểu lớn qua kiểu nhỏ: có thể mất giá trị

– Ép từ lớp cơ sở qua lớp dẫn xuất

double x = 74.86;

int i = ( int ) ) x; // i = 74

string s = "Hello" ;

object o = s;

Trang 61

Using Convert class

• Thường dùng khi cần chuyển đổi giữa các kiểu không có liên hệ với nhau

Trang 62

System.Object class

Trang 63

Boxing and unboxing

• Dùng để chỉ việc chuyển dữ liệu từ stack sang heap và ngược lại

• Mục đích: cải thiện việc thực thi chương trình

Trang 64

int i =42;

Object o = i;

• I is a value type, so it exists in the stack

• O is a reference type, so it must refer to

objects on the heap

 The runtime allocates a piece of memory

from the heap, copies the value of integer i to this piece, and refers the object o to this copy

Trang 65

• The automatic copying of an item from the

stack to the heap is called boxing

Trang 66

• If you modify the original value of a variable, the value on the heap will not change and vice versa

Trang 67

• Int i=o  compile time error The object o can refer to absolutely anything and not just an

int

• To obtain the value of the boxed copy, you

must use a cast operation

Trang 68

Unboxing Int I = 42;

Object o = I; //boxes

I = (int)o; // compiles okay

Trang 69

Circle c = new Circle(42);

Object o = c; // doesn’t box because c is a reference

variable;

Int I = (int) o; //compiles okay but throws an exception

at run time

Trang 71

Ảnh hưởng của boxing/unboxing đến việc

thực thi chương trình

Trang 72

checked & unchecked

throws OverFlowException

used to control the overflow checking context

for integral-type arithmetic operations and

conversions

Trang 73

ref , out, param

• ref: tương tự như truyền tham chiếu trong C/C++

• Từ khoá ref phải được dùng lúc gọi hàm

• Các tham số truyền dạng ref phải được khởi tạo giá trị trước

Khai báo ref trước kiểu dữ liệu

sử dụng ref cho tham số khi gọi hàm

Trang 74

ref, out , param

• out: tương tự như ref

• Khác ref là ko cần khởi tạo giá trị trước khi truyền

Khai báo cho tham số Dùng trước tham

số khi gọi hàm

Trang 75

ref, out, param

3 phần tử 6 phần tử Mảng array

Luôn khai báo ở cuối danh sách tham số

Luôn khai báo ở cuối danh sách tham số

Trang 77

• Tương tự như C: while, do while, for

while <điều kiện>

do { // phần thân do while } while <điều kiện>;

for( khởi tạo biến lặp; <điều kiện theo biến lặp>; thay đổi biến lặp)

Trang 79

foreach( typedata identifier in objectArray) {

// thân foreach }

foreach( typedata identifier in objectArray) {

// thân foreach }

Trang 80

• Biểu thức switch gồm: kiểu số, ký tự, enum và chuỗi

• Sử dụng break, goto, return để điều khiển luồng thực thi

• Nếu ko nhãn nào phù hợp → default

• Nếu ko có default → thực hiện lệnh sau switch

Trang 82

• Thoát khỏi hàm void

• Trả về 1 giá trị của hàm

void Func1(int x) {

if (x == 0) return;

.

}

void Func1(int x) {

if (x == 0) return;

else return b;

int max(int a, int b) {

if (a > b) return a;

else return b;

Trang 83

Rolling a Six-Sided Die

• Let us develop an application that simulates

20 rolls of a six-sided die and displays the

value of each roll

Trang 84

Class Random (of namespace System)

• Objects of class Random can produce

random byte, int and double values

• A new random-number generator object can

be created as follows:

Random randomNumbers = new Random();

 The random-number generator object can

then be used to generate random byte, int

and double values

Trang 85

Class Random (of namespace System)

• Method Next of class Random generates a random

int randomValue = randomNumbers.Next();

 Values returned by Next are actually

pseudorandom numbers—a sequence of

values produced by a complex mathematical calculation

Trang 86

Complex variable types

• C# cung cấp ba loại biến phức nhưng rất thông dụng:

– Enumerations (often referred to as enums)

– structs (occasionally referred to as structures)

– Arrays

Trang 87

}

Trang 88

<valueN> }

• Underlying types of byte, sbyte, short, ushort,

Trang 89

Định nghĩa enumeration

• Mặc định, mỗi giá trị được gán cho 1 giá trị

tương ứng với underlying type value theo thứ tự được định nghĩa  <value1> được gán giá trị 0, <value2> có giá trị 1…

• Có thể override phép gán này bằng toán tử =

Trang 90

Khai báo và sử dụng kiểu enumeration

• Khai báo biến kiểu enumeration:

<typeName><varName>;

• Gán giá trị cho biến:

<varName> = <typeName>.<value>;

Trang 92

Struct (hay structure)

• Là kiểu dữ liệu được hợp thành từ nhiều phần dữ liệu có kiểu dữ liệu khác nhau

• Cho phép người dùng tự định nghĩa kiểu dữ liệu của riêng mình

Trang 93

Định nghĩa kiều struct

struct <typeName>

{

<memberDeclarations>

} Mỗi <memberDeclaration> có dạng như sau:

<accessibility><type><name>;

Ví dụ: struct route

{ public orientation direction;

public double distance;

}

Trang 94

• is a collection of values of a similar data type

• C# arrays are a reference type

• Each array in C# is an object and is inherited

from the System.Array class

• Arrays are declared as:

<data type> [] <identifier> = new <data type>[<size of array>]

Ex: int [] integers = new int[10];

Hoặc: int [] integers;

Trang 96

• The size of an array is fixed and must be

defined before using it

• Can use variables to define the size of the

array:

int size = 10;

int [] integers = new int[size];

• Array can be defined by using the values

int [] integers = {1, 2, 3, 4, 5};

Trang 97

Truy xuất các phần tử mảng Accessing the values stored in an array

• Sử dụng toán tử chỉ mục (indexing operator)

[int index]

• Giá trị chỉ mục trong C# bắt đầu từ 0.

• Truy xuất các phần tử của mảng:

– Dùng vòng lặp for và toán tử chỉ số

– Dùng vòng lặp foreach

• Note:vòng lặp foreach chỉ cho phép read-only Không thể thực hiện:

{ friendName = "Rupert the bear};

Trang 100

• Lấy kích thước mảng qua thuộc tính Length

– int Size = myArray.Length;

• Nếu thành phần của mảng là kiểu định trước,

có thể dùng hàm Sort của Array để sắp xếp

– Array.Sort(myArray);

• Dùng hàm Reverse của Array để đảo thứ tự

các phần tử trong mảng

– Array.Reverse(myArray);

Trang 102

Multidimensional Arrays

• A multidimensional array is simply one that

uses multiple indices to access its elements

• Cách khai báo

<baseType>[,,,] <name>;

Ví dụ: tạo mảng 2 chiều 3 hàng 4 cột

double[,] hillHeight = new double[3,4];

double[,] hillHeight = { { 1, 2, 3, 4 }, { 2, 3, 4, 5 }, {

3, 4, 5, 6 } };

Ngày đăng: 12/07/2014, 02:20

TỪ KHÓA LIÊN QUAN

w