c# 基礎語法
基礎語法
第一個程序
using System;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello World");
}
}
數據類型
類型 | 描述 | 範圍 | 默認值 |
---|---|---|---|
bool | 布爾值 | True 或 False | False |
byte | 8 位無符號整數 | 0 到 255 | 0 |
char | 16 位 Unicode 字符 | U +0000 到 U +ffff | '\0' |
decimal | 128 位精確的十進制值,28-29 有效位數 | (-7.9 x 1028 到 7.9 x 1028) / 100 到 28 | 0.0M |
double | 64 位雙精度浮點型 | (+/-)5.0 x 10-324 到 (+/-)1.7 x 10308 | 0.0D |
float | 32 位單精度浮點型 | -3.4 x 1038 到 + 3.4 x 1038 | 0.0F |
int | 32 位有符號整數類型 | -2,147,483,648 到 2,147,483,647 | 0 |
long | 64 位有符號整數類型 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 | 0L |
sbyte | 8 位有符號整數類型 | -128 到 127 | 0 |
short | 16 位有符號整數類型 | -32,768 到 32,767 | 0 |
uint | 32 位無符號整數類型 | 0 到 4,294,967,295 | 0 |
ulong | 64 位無符號整數類型 | 0 到 18,446,744,073,709,551,615 | 0 |
ushort | 16 位無符號整數類型 | 0 到 65,535 | 0 |
類型轉換
using System;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
double d = 5673.74;
int i;
// 強制轉換 double 爲 int
i = (int)d;
Console.WriteLine(i);
Console.ReadKey();
}
}
}
C# 類型轉換方法
序號 | 方法 & 描述 |
---|---|
1 | ToBoolean 如果可能的話,把類型轉換爲布爾型。 |
2 | ToByte 把類型轉換爲字節類型。 |
3 | ToChar 如果可能的話,把類型轉換爲單個 Unicode 字符類型。 |
4 | ToDateTime 把類型(整數或字符串類型)轉換爲 日期-時間 結構。 |
5 | ToDecimal 把浮點型或整數類型轉換爲十進制類型。 |
6 | ToDouble 把類型轉換爲雙精度浮點型。 |
7 | ToInt16 把類型轉換爲 16 位整數類型。 |
8 | ToInt32 把類型轉換爲 32 位整數類型。 |
9 | ToInt64 把類型轉換爲 64 位整數類型。 |
10 | ToSbyte 把類型轉換爲有符號字節類型。 |
11 | ToSingle 把類型轉換爲小浮點數類型。 |
12 | ToString 把類型轉換爲字符串類型。 |
13 | ToType 把類型轉換爲指定類型。 |
14 | ToUInt16 把類型轉換爲 16 位無符號整數類型。 |
15 | ToUInt32 把類型轉換爲 32 位無符號整數類型。 |
16 | ToUInt64 把類型轉換爲 64 位無符號整數類型。 |
實例
int i = 75;
float f = 53.005f;
double d = 2345.7652;
bool b = true;
Console.WriteLine(i.ToString());
Console.WriteLine(f.ToString());
Console.WriteLine(d.ToString());
Console.WriteLine(b.ToString());
Console.ReadKey();
註釋
// 單行註釋
/**/ 多行註釋
/// 文檔註釋
表達式
類別 | 表達式 | 說明 |
---|---|---|
基本 | x.m |
成員訪問 |
x(...) |
方法和委託調用 | |
x[...] |
數組和索引器訪問 | |
newT(...) |
對象和委託創建 | |
newT(...){...} |
使用初始值設定項創建對象 | |
new{...} |
匿名對象初始值設定項 | |
newT[...] |
數組創建 | |
一元 | +x |
恆等 |
-x |
求相反數 | |
!x |
邏輯求反 | |
~x |
按位求反 | |
++x |
前增量 | |
--x |
前減量 | |
x++ |
後增量 | |
x-- |
後減量 | |
(T)x |
將x顯示轉換爲類型T | |
二元 | x * y |
乘法 |
x / y |
除法 | |
x % y |
取餘 | |
x + y |
加法,字符串串聯 | |
x - y |
減法 | |
x << y |
位左移 | |
x >> y |
位右移 | |
x < y |
小於 | |
x > y |
大於 | |
x <= y |
小於或等於 | |
x >= y |
大於或等於 | |
x is T |
如果 x 位 T ,返回true ,否則false |
|
x as T |
返回轉換爲類型 T 的 x ,如果 x 不是 T 則返回null |
|
x == y |
等於 | |
x != y |
不等於 | |
x & y |
整形按位與 ,布爾邏輯AND | |
x | y |
||
x && y |
且,當 x 爲true 時,纔對 y 求值 |
|
`x | ||
x ?? y |
如果 x 爲null ,則計算結果爲 y,否則爲 x |
|
三元 | x ? y : z |
如果 x 爲true ,對 y 求值,x 爲false ,對 z 求值 |
賦值或匿名函數 | x = y |
賦值 |
x = x + y |
複合賦值 | |
(T x) => y |
匿名函數(lambda表達式) |
判斷語句
if 語句 | 一個 if 語句 由一個布爾表達式後跟一個或多個語句組成。 |
---|---|
if...else 語句 | 一個 if 語句 後可跟一個可選的 else 語句,else 語句在布爾表達式爲假時執行。 |
嵌套 if 語句 | 您可以在一個 if 或 else if 語句內使用另一個 if 或 else if 語句。 |
switch 語句 | 一個 switch 語句允許測試一個變量等於多個值時的情況。 |
嵌套 switch 語句 | 您可以在一個 switch 語句內使用另一個 switch 語句。 |
for(int i = 0; i<10;i++ ){ }
while循環
while(true){ }
do-while循環
do{ }while(true)
三元運算符
Exp1 ? Exp2 : Exp3;
其中,Exp1、Exp2 和 Exp3 是表達式。請注意,冒號的使用和位置。
? 表達式的值是由 Exp1 決定的。如果 Exp1 爲真,則計算 Exp2 的值,結果即爲整個 ? 表達式的值。如果 Exp1 爲假,則計算 Exp3 的值,結果即爲整個 ? 表達式的值。
循環
循環類型 | 描述 |
---|---|
while 循環 | 當給定條件爲真時,重複語句或語句組。它會在執行循環主體之前測試條件。 |
for/foreach 循環 | 多次執行一個語句序列,簡化管理循環變量的代碼。 |
do...while 循環 | 除了它是在循環主體結尾測試條件外,其他與 while 語句類似。 |
嵌套循環 | 您可以在 while、for 或 do..while 循環內使用一個或多個循環。 |
數組
//聲明沒有元素的數組
int[] ints = new int[6]
//聲明初始化有元素的數組
int[] ints = new int[]{1, 3, 4, 5}
//在聲明初始化有元素的數組時,也可以指定數組大小
string[] strings = new int[5]{"H", “E", "L",“L","0"}
函數
函數的參數設置&傳參行爲
- 參數可認爲是外部需要函數幫忙處理的數據。
- 外部通過傳遞參數的形式,將需要處理的數據交給函數處理。
函數返回值的設置
- 函數返回值可以認爲是外部調用某種行爲後得到的一種反饋。
拓展-- 參數修飾符
修飾符種類
- 無修飾符:如果一個參數沒有用參數修飾符標記,則認爲它將按值進行傳遞,這將意味着被調用的方法收到原始數據的一份副本。
out
: 輸出參數由被調用的方法賦值,因此按引用傳遞,如果被調用的方法沒有給輸出參數賦值,就會出現編譯錯誤,也就是說,只要調用了,就必須給賦值。out
最大的用途就是調用者只使用一次方法的調用就能獲得多個返回值。(在C#7.0中要實現一次方法的調用就能獲得多個返回值,建議使用元組。是元組不是元祖),調用的是指針,是地址ref
: 調用者賦初值,並且可以由被調用的方法可選的重新賦值(數據是按引用傳遞的)。如果被調用的方法未能給ref
參數賦值,也不會有編譯器錯誤。- 瞭解即可
params
:這個參數修飾符允許將一組可變的數量的參數作爲單獨的邏輯參數進行傳遞, 方法只能有一個params
修飾符,而且必須是方法的最後一個參數。 out
和ref
的區別out
修飾的參數必須在方法內修改,而ref
可以修改也可以不修改;out
在傳入參數的時候,參數是局部變量的話,可以不用賦值,因爲out
一定會對其進行賦值;- 而
ref
修飾的參數,在實參必須有初始值才能調用。因爲ref
修飾的不一定會給它賦值。
結構體
在 C# 中,結構體是值類型數據結構。它使得一個單一變量可以存儲各種數據類型的相關數據。struct 關鍵字用於創建結構體。
using System;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
Books books;
books.title = "C Programming";
books.author = "Nuha Ali";
books.subject = "C Programming Tutorial";
books.book_id = 6495407;
Console.WriteLine(books.title);
Console.WriteLine(books.author);
Console.WriteLine(books.subject);
Console.WriteLine(books.book_id);
}
struct Books
{
public string title;
public string author;
public string subject;
public int book_id;
};
}
}
結果:
C Programming
Nuha Ali
C Programming Tutorial
6495407
類
當你定義一個類時,你定義了一個數據類型的藍圖。這實際上並沒有定義任何的數據,但它定義了類的名稱意味着什麼,也就是說,類的對象由什麼組成及在這個對象上可執行什麼操作。對象是類的實例。構成類的方法和變量稱爲類的成員。
using System;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
Box box;
Box Box1 = new Box();
}
class Box
{
public double length; // 長度
public double breadth; // 寬度
public double height; // 高度
}
}
}
繼承
繼承是面向對象程序設計中最重要的概念之一。繼承允許我們根據一個類來定義另一個類,這使得創建和維護應用程序變得更容易。同時也有利於重用代碼和節省開發時間。
當創建一個類時,程序員不需要完全重新編寫新的數據成員和成員函數,只需要設計一個新的類,繼承了已有的類的成員即可。這個已有的類被稱爲的基類,這個新的類被稱爲派生類。
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
Box box;
Box Box1 = new Box();
}
class Box
{
public double length; // 長度
public double breadth; // 寬度
public double height; // 高度
}
class boxx :Box
{
}
}
}
多態
C# 允許您使用關鍵字 abstract 創建抽象類,用於提供接口的部分類的實現。當一個派生類繼承自該抽象類時,實現即完成。抽象類包含抽象方法,抽象方法可被派生類實現。派生類具有更專業的功能。
請注意,下面是有關抽象類的一些規則:
- 不能創建一個抽象類的實例。
- 不能在一個抽象類外部聲明一個抽象方法。
- 通過在類定義前面放置關鍵字 sealed,可以將類聲明爲密封類。當一個類被聲明爲 sealed 時,它不能被繼承。抽象類不能被聲明爲 sealed。
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
var shapes = new List<Shape>
{
new Rectangle(),
new Triangle(),
new Circle()
};
foreach (var shape in shapes)
{
shape.Draw();
}
}
public class Shape
{
public int X { get; private set; }
public int Y { get; private set; }
public int Height { get; set; }
public int Width { get; set; }
// 虛方法
public virtual void Draw()
{
Console.WriteLine("執行基類的畫圖任務");
}
}
class Circle : Shape
{
public override void Draw()
{
Console.WriteLine("畫一個圓形");
base.Draw();
}
}
class Rectangle : Shape
{
public override void Draw()
{
Console.WriteLine("畫一個長方形");
base.Draw();
}
}
class Triangle : Shape
{
public override void Draw()
{
Console.WriteLine("畫一個三角形");
base.Draw();
}
}
}
}
接口
namespace ConsoleApp1
{
interface IMyInterface
{
// 接口成員
void MethodToImplement();
}
class InterfaceImplementer : IMyInterface
{
public void MethodToImplement()
{
Console.WriteLine("MethodToImplement() called.");
}
}
class Program
{
static void Main()
{
InterfaceImplementer iImp = new InterfaceImplementer();
iImp.MethodToImplement();
}
}
}