類型和變數(C#學習筆記02)

来源:https://www.cnblogs.com/asahiLikka/archive/2019/10/09/11632749.html
-Advertisement-
Play Games

類型和變數 [C#類型和變數(原文參考官方教程)]https://docs.microsoft.com/zh-cn/dotnet/csharp/tour-of-csharp/types-and-variables C#有兩種類型: 1. 值類型 1. 簡單類型 2. 枚舉類型 格式為 enum E ...


類型和變數

[C#類型和變數(原文參考官方教程)]https://docs.microsoft.com/zh-cn/dotnet/csharp/tour-of-csharp/types-and-variables

C#有兩種類型:

1. 值類型

1. 簡單類型

  1. 有符號的整型:sbyte、short、int、long
  2. 無符號的整型:byte、ushort、uint、ulong
  3. Unicode 字元:char
  4. IEEE 二進位浮點:float、double
  5. 高精度十進位浮點數:decimal
  6. 布爾:bool

2. 枚舉類型

格式為 enum E {...} 的用戶定義類型
每個枚舉類型都有一個可以為任意整型數值類型的基礎類型
與C++相同,枚舉數可以使用初始值設定項來替代預設值,預設從0開始的整型數值


public class EnumTest
{
    enum Day { Sun, Mon, Tue, Wed, Thu, Fri, Sat };

    static void Main()
    {
        int x = (int)Day.Sun;
        int y = (int)Day.Fri;
        Console.WriteLine("Sun = {0}", x);
        Console.WriteLine("Fri = {0}", y);
    }
}
/* Output:
   Sun = 0
   Fri = 5
*/

3. 結構類型

格式為 struct S {...} 的用戶定義類型
struct是一種值類型,只要是用於封裝小型數據
例如把“書”這個實體所包含的價格,書名和作者三個數據封裝成結構體Book

public struct Book
{
    public decimal price;
    public string title;
    public string author;
}

4. 可為null的值類型

值為 null 的其他所有值類型的擴展
在標準類型下的擴展,是 System.Nullable<T> 結構的實例
以int類型作為測試,int類型本身不能初始化為null類型


int? x = null;
if (x.HasValue)
{
    Console.WriteLine($"x is {x.Value}");
}
else
{
    Console.WriteLine("x does not have a value");
}

輸出:

x does not have a value

2. 引用類型

1. 類類型

  1. 其他所有類型的最終基類:objectUnicode
  2. 字元串:string
  3. 格式為 class C {...} 的用戶定義類型

C#中,一個類只能從一個基類繼承實現,但是一個類可以實現多個介面。

繼承示例
class ClassA { }
single class DerivedClass: BaseClass { }
無,實現兩個介面 class ImplClass: IFace1, IFace2 { }
無,實現一個介面 class ImplDerivedClass: BaseClass, IFace1 { }

類成員(包括嵌套的類)可以是 public、protected internal、protected、internal、private 或 private protected。 預設情況下成員為 private。

public:同一程式集中的任何其他代碼或引用該程式集的其他程式集都可以訪問該類型或成員。

private:只有同一類或結構中的代碼可以訪問該類型或成員。

protected:只有同一類或者從該類派生的類中的代碼可以訪問該類型或成員。

internal:同一程式集中的任何代碼都可以訪問該類型或成員,但其他程式集中的代碼不可以。

protected internal:該類型或成員可由對其進行聲明的程式集或另一程式集中的派生類中的任何代碼訪問。

private protected:只有在其聲明程式集內,通過相同類中的代碼或派生自該類的類型,才能訪問類型或成員。

註:
被編譯到同一個dll或exe中的程式就是處於同一個程式集中,在不同的dll或exe文件中的程式就是處於不同的程式集中。.net中的程式集就是一個編譯器直接生成的dll或可執行的exe文件,包含程式集清單、元數據和MSIL等。是一個或者多個類型定義及資源文件的集合體。

下麵的示例說明如何聲明類欄位、構造函數和方法。 該示例還說明如何實例化對象及如何列印實例數據。 本例聲明瞭兩個類。 第一個類 Child 包含兩個私有欄位(name 和 age)、兩個公共構造函數和一個公共方法。 第二個類 StringTest 用於包含 Main。

class Child
{
    private int age;
    private string name;

    // 無參數構造函數
    public Child()
    {
        name = "N/A";
    }

    // 帶參數的構造函數
    public Child(string name, int age)
    {
        this.name = name;
        this.age = age;
    }

    // Printing method:
    public void PrintChild()
    {
        Console.WriteLine("{0}, {1} years old.", name, age);
    }
}

class StringTest
{
    static void Main()
    {
        // Create objects by using the new operator:
        Child child1 = new Child("Craig", 11);
        Child child2 = new Child("Sally", 10);

        // Create an object using the default constructor:
        Child child3 = new Child();

        // Display results:
        Console.Write("Child #1: ");
        child1.PrintChild();
        Console.Write("Child #2: ");
        child2.PrintChild();
        Console.Write("Child #3: ");
        child3.PrintChild();
    }
}
/* Output:
    Child #1: Craig, 11 years old.
    Child #2: Sally, 10 years old.
    Child #3: N/A, 0 years old.
*/

2. 介面類型

格式為 interface I {...} 的用戶定義類型
介面只包含方法、屬性、事件或索引器的簽名。 實現介面的類或結構必須實現介面定義中指定的介面成員。
實例:

interface ISampleInterface       //只定義聲明
{
    void SampleMethod();
}

class ImplementationClass : ISampleInterface
{
    // Explicit interface member implementation: (具體的方法實現在類中實現)
    void ISampleInterface.SampleMethod()
    {
        // Method implementation.(方法代碼)
    }

    static void Main()
    {
        // Declare an interface instance.
        ISampleInterface obj = new ImplementationClass();

        // Call the member.
        obj.SampleMethod();
    }
}

3. 數組類型

一維和多維,例如 int[] 和 int[,]
可以將同一類型的多個變數存儲在一個數組數據結構中。 通過指定數組的元素類型來聲明數組。

class TestArraysClass
{
    static void Main()
    {
        // Declare a single-dimensional array. 
        int[] array1 = new int[5];

        // Declare and set array element values.
        int[] array2 = new int[] { 1, 3, 5, 7, 9 };

        // Alternative syntax.
        int[] array3 = { 1, 2, 3, 4, 5, 6 };

        // Declare a two dimensional array.
        int[,] multiDimensionalArray1 = new int[2, 3];

        // Declare and set array element values.
        int[,] multiDimensionalArray2 = { { 1, 2, 3 }, { 4, 5, 6 } };

        // Declare a jagged array.
        int[][] jaggedArray = new int[6][];

        // Set the values of the first array in the jagged array structure.
        jaggedArray[0] = new int[4] { 1, 2, 3, 4 };
    }
}

4. 委托類型

格式為 delegate int D(...) 的用戶定義類型
具體參考:事件與委托學習筆記03

https://www.cnblogs.com/asahiLikka/p/11644393.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 方法一:修改pom.xml文件 方法二:在Terminal執行命令 mvn install -DskipTests 方法三:在Terminal執行命令 mvn install -Dmaven.test.skip=true 轉載於:https://blog.csdn.net/so_geili/arti ...
  • 小文:今天面試又搞砸了? 小 k:怎麼了? 小文:又一個大小寫轉換的題目感覺答錯了。 小 k:說來聽聽。 小文:將"hello world"轉換為首字母大寫"Hello World" 小 k:你的答案是什麼? 小文:用 capitalize 方法啊。 小 k:capitalize 方法只能將第一個單 ...
  • 本文主要講解Spring的基礎環境搭建以及演變由來,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 實驗環境:WIN7虛擬機 軟體:VC6 首先在VC6裡面寫一個空函數Fun(); F7編譯運行一下,沒有出錯,接著在函數處使用F9下斷點,使程式運行到Fun函數時停下。 接著F5開始運行這個程式 程式停在了Fun函數處,反彙編進去進行逆向分析 可以看到程式停在Fun函數的入口處,這裡的call就是F ...
  • 摘要 在 "詳解http報文" 一文中,詳細介紹了http報文的文本結構。那麼作為服務端,web容器是如何解析http報文的呢?本文以jetty和undertow容器為例,來解析web容器是如何處理http報文的。 在前文中我們從概覽中可以瞭解到,http報文其實就是一定規則的字元串,那麼解析它們, ...
  • composer是什麼 composer是PHP的插件依賴管理工具,我個人感覺和java的Maven、Gradle很類似。 Windows OS下安裝composer 參考: https://www.php.cn/php weizijiaocheng 400785.html https://blog ...
  • 聊起中斷,大家可能最熟悉的例子就是線程休眠。下麵就是一個線程休眠的 demo,在這個例子中,當我們調用 方法,該方法將會拋出一個需要捕獲的中斷異常,這裡捕獲該異常並直接返回。 java for (int i = 0; i An interrupt is an indication to a thre ...
  • 使用Mybatis查詢客戶端信息 前面的例子使用了預設的jdbc配置來動態從資料庫查詢客戶端信息,下麵來改用更加靈活的mybatis來實現,改用mybatis,首先pom中換成mybatis的依賴: 然後新建一個實體類,並實現查詢需要的 ClientDetails 介面: 由於介面預設需要實現的方法 ...
一周排行
    -Advertisement-
    Play Games
  • 概述:在C#中,++i和i++都是自增運算符,其中++i先增加值再返回,而i++先返回值再增加。應用場景根據需求選擇,首碼適合先增後用,尾碼適合先用後增。詳細示例提供清晰的代碼演示這兩者的操作時機和實際應用。 在C#中,++i 和 i++ 都是自增運算符,但它們在操作上有細微的差異,主要體現在操作的 ...
  • 上次發佈了:Taurus.MVC 性能壓力測試(ap 壓測 和 linux 下wrk 壓測):.NET Core 版本,今天計劃準備壓測一下 .NET 版本,來測試並記錄一下 Taurus.MVC 框架在 .NET 版本的性能,以便後續持續優化改進。 為了方便對比,本文章的電腦環境和測試思路,儘量和... ...
  • .NET WebAPI作為一種構建RESTful服務的強大工具,為開發者提供了便捷的方式來定義、處理HTTP請求並返迴響應。在設計API介面時,正確地接收和解析客戶端發送的數據至關重要。.NET WebAPI提供了一系列特性,如[FromRoute]、[FromQuery]和[FromBody],用 ...
  • 原因:我之所以想做這個項目,是因為在之前查找關於C#/WPF相關資料時,我發現講解圖像濾鏡的資源非常稀缺。此外,我註意到許多現有的開源庫主要基於CPU進行圖像渲染。這種方式在處理大量圖像時,會導致CPU的渲染負擔過重。因此,我將在下文中介紹如何通過GPU渲染來有效實現圖像的各種濾鏡效果。 生成的效果 ...
  • 引言 上一章我們介紹了在xUnit單元測試中用xUnit.DependencyInject來使用依賴註入,上一章我們的Sample.Repository倉儲層有一個批量註入的介面沒有做單元測試,今天用這個示例來演示一下如何用Bogus創建模擬數據 ,和 EFCore 的種子數據生成 Bogus 的優 ...
  • 一、前言 在自己的項目中,涉及到實時心率曲線的繪製,項目上的曲線繪製,一般很難找到能直接用的第三方庫,而且有些還是定製化的功能,所以還是自己繪製比較方便。很多人一聽到自己畫就害怕,感覺很難,今天就分享一個完整的實時心率數據繪製心率曲線圖的例子;之前的博客也分享給DrawingVisual繪製曲線的方 ...
  • 如果你在自定義的 Main 方法中直接使用 App 類並啟動應用程式,但發現 App.xaml 中定義的資源沒有被正確載入,那麼問題可能在於如何正確配置 App.xaml 與你的 App 類的交互。 確保 App.xaml 文件中的 x:Class 屬性正確指向你的 App 類。這樣,當你創建 Ap ...
  • 一:背景 1. 講故事 上個月有個朋友在微信上找到我,說他們的軟體在客戶那邊隔幾天就要崩潰一次,一直都沒有找到原因,讓我幫忙看下怎麼回事,確實工控類的軟體環境複雜難搞,朋友手上有一個崩潰的dump,剛好丟給我來分析一下。 二:WinDbg分析 1. 程式為什麼會崩潰 windbg 有一個厲害之處在於 ...
  • 前言 .NET生態中有許多依賴註入容器。在大多數情況下,微軟提供的內置容器在易用性和性能方面都非常優秀。外加ASP.NET Core預設使用內置容器,使用很方便。 但是筆者在使用中一直有一個頭疼的問題:服務工廠無法提供請求的服務類型相關的信息。這在一般情況下並沒有影響,但是內置容器支持註冊開放泛型服 ...
  • 一、前言 在項目開發過程中,DataGrid是經常使用到的一個數據展示控制項,而通常表格的最後一列是作為操作列存在,比如會有編輯、刪除等功能按鈕。但WPF的原始DataGrid中,預設只支持固定左側列,這跟大家習慣性操作列放最後不符,今天就來介紹一種簡單的方式實現固定右側列。(這裡的實現方式參考的大佬 ...