1. 程式人生 > >C Sharp與.net學習筆記(一)

C Sharp與.net學習筆記(一)

  • C#和.net都是零基礎,需要一到兩週先惡補一點東西,特此記錄一下2012.01.11

C#控制檯程式

一個入門用的hello world程式如下:

using System;

class CSharpTest
{
    static void Main()
    {
        Console.WriteLine("Hello world not using Qt");
    }
}

編譯

E:\Test1> csc hello.cs

執行

E:\Test1> hello
Hello world not using Qt

有沒有問題?

  • 返回值何在?
  • 命令列引數如何獲取?
  • 入口點必須為Main?如果多個類的話,怎麼找到入口的
  • ...

入口點

可用的入口點(需要時某個類的靜態成員函式,MSDN中 Hello World in Visual C#中提到必須是public,但似乎private也沒有問題):

  • static void Main()

  • static int Main()

  • static void Main(string[] args)

  • static int Main(string[] args)

如果下面這樣的程式,還能直接csc hello.cs編譯麼?

using System;

class CSharpTest
{
    static void Main()
    {
        Console.WriteLine("Hello world not using Qt");
    }
}

class CSharpTest2
{
    static void Main(string [] args)
    {
        Console.WriteLine("Hello world not using Qt too");
    }
}

如何解決?可以用

csc /main:CSharpTest  hello.cs

csc /main:CSharpTest2  hello.cs

選擇入口點。

如果一個類內多個入口點函式,似乎就沒辦法了(fixme)

返回值

  • 返回值是 int 的入口點,然後直接使用return即可
using System;

class CSharpTest
{
    static int Main()
    {
        Console.WriteLine("Hello world not using Qt");
        return 1;
    }
}

結果

E:\Test1>hello
Hello world not using Qt

E:\Test1>echo %errorlevel%
1

可以直接使用 System.Environment.Exit

using System;

class CSharpTest
{
    static void Main()
    {
        Console.WriteLine("Hello world not using Qt");
        Environment.Exit(1);
    }
}

而不用考慮入口點函式是否返回值是int

命令列引數

似乎沒什麼好說的,與C++的不同處在於,引數中第一個不是程式名

using System;

class CSharpTest
{
    static void Main(string[] args)
    {
        foreach (string arg in args)
            Console.WriteLine(arg);
    }
}

結果:

E:\Test1>hello Qt5 Qt4 Qt3
Qt5
Qt4
Qt3

Gui程式(Windows Forms)

使用Windows Forms:

using System.Windows.Forms;

class CSharpTest
{
    static void Main()
    {
        MessageBox.Show("Hello World not using Qt");
    }
}

是這麼編譯麼?

csc hello.cs

恩,可以,只不過有cmd視窗彈出。需要指定

csc /arget:winexe hello.cs

一般情況下,會需要使用一個Application(用來控制程式的啟動、停止、訊息處理等)

using System.Windows.Forms;

public class Form1 : Form
{
    public static void Main()
    {
        Application.Run(new Form1());
    }

    public Form1()
    {
        this.DoubleClick += new System.EventHandler(form_Click);
    }

    private void form_Click(object sender, System.EventArgs e)
    {
        Application.Exit();
    }
}

編譯命令同上

Gui程式(WPF)

這應該是最簡單的WPF的程式了吧?

using System.Windows;

public class WpfTest1
{
    public static void Main()
    {
        MessageBox.Show("WPF Applicaiton Test");
    }
}

編譯(好像必須指定這些reference,fixme):

E:\Test1>csc /target:winexe /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\PresentationCore.dll" /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\PresentationFramework.dll" /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\W
indowsBase.dll"  hello.cs

正常情況下,我們需要有Application(和Windows.Forms中的不是同一個)

using System.Windows;

public class WpfTest1
{
    public static void Main()
    {
        Application app = new Application();
        app.Run();
    }
}

編譯命令同上

而一旦有了xaml,似乎只靠命令列工具就很難搞定了。需要有csproj這樣的工程檔案,然後用msbuild或者直接使用visual studio了。好麻煩...(xaml被編譯成了baml資源,然後嵌入到最終的dll或exe中)

相關推薦

C Sharp.net學習筆記()

C#和.net都是零基礎,需要一到兩週先惡補一點東西,特此記錄一下2012.01.11 C#控制檯程式 一個入門用的hello world程式如下: using System; class CSharpTest { static void Main()

C Sharp.net學習筆記(三)

先簡單瞭解一下C#下外掛框架。外掛一般就是定義了某個特定介面的並被動態載入的動態庫。應用程式啟動後,可以查詢(比如某個特定目錄)、動態載入、識別(某個特定介面)、使用外掛(呼叫介面函式等)。 現在.net庫中有了兩套外掛的框架: MAF: Managed Add-i

QuartZ .Net 學習筆記: 源碼下載查看

net href cnblogs 方法 category solution ges 博客 存在 最近因為工作需要研究一下QuartZ .net , 之前也用過不過但沒有深入了解, 現想深入研究一下 網上相關QuartZ .net 的文章不少, 但大部分都是源於張善友的博

GitHub入門實踐 學習筆記()

lac 連接 創建分支 rap 自動 成功 -- repo 哈希 Pull Request 是指開發者在本地對源代碼進行更改後,向 GitHub中托管的 Git 倉庫請求合並的功能。 GitHub 的 Pull Request 不但能輕松查看源代碼的前後差別,還可以對

C#委託事件學習筆記

委託事件學習筆記 本文是學習委託和事件的筆記,水平有限,如有錯漏之處,還望大神不吝賜教。 什麼是委託?從字面意思來解釋,就是把一個動作交給別人去執行。在實際開發中最常用的就是使一個方法可以當做一個引數傳遞,以便在方法中可以根據實際情況實現不同的功能。 什麼是事件?事件就是發生的事情,例如點選了一

Objective-c方法學習筆記

@interface Shape : NSObject { ShapeColor fillColor; ShapeRect bounds; } - (void) setFillColor: (ShapeColor) fillColor; - (void) setB

Go語言併發並行學習筆記()

如果不是我對真正並行的執行緒的追求,就不會認識到Go有多麼的迷人。 Go語言從語言層面上就支援了併發,這與其他語言大不一樣,不像以前我們要用Thread庫 來新建執行緒,還要用執行緒安全的佇列庫來共享資料。 以下是我入門的學習筆記。 Go語言的goroutines

資料結構演算法學習筆記:複雜度分析

一、為什麼要進行復雜度分析     資料結構是用來解決“快”和“省”的問題,也就是如何是程式碼執行更快以及如何節省更多的空間。因此執行效率在演算法中就是一個非常重要的考核指標。時間、空間複雜度分析就是用來衡量一個演算法程式碼的執行效率的指標。複雜度分析在資料結構和演算法中佔

Python資料分析挖掘學習筆記:庫和環境搭建

概念介紹: 資料分析:  用適當的統計分析方法對收集來的大量資料進行詳細研究和概括總結,以求最大化地發揮資料的作用,提取有用資訊和形成結論 資料探勘: 從大量資料中通過演算法搜尋隱藏於其中資訊的過程. 資料分析的三大作用:現狀分析、原因分析、預測分析。 資料分析的流程

《嵌入式實時作業系統µC/OS-II》學習筆記()

這本書,早在兩年前畢業,一位一起進公司的好友就買了,不過一直沒看,翻了翻目錄,似乎工作中根本用不到,抱著一種若不能學以致用,則學了也很難深入的想法,一直也就沒看。直到在上期《程式設計師》上看到推薦,才忽然提起興趣,兩年嵌入式開發以後,再回過頭來看此書,確實還說不好合適不合適,也許隨著瞭解的深入,不保證某天就中

C#製作ORM對映學習筆記 自定義Attribute類

之前在做unity專案時發現只能用odbc連線資料庫,感覺非常的麻煩,因為之前做web開發的時候用慣了ORM對映,所以我想在unity中也用一下ORM(雖然我知道出於效能的考慮這樣做事不好的,不過自己的小專案嗎管他的,自己爽就行了)。不過現在世面上的ORM對映基本都是為we

[計算機視覺:演算法應用]學習筆記:影象形成

1. 2D點可以利用一對值(x,y)來表示,也可以利用齊次座標來表示,那麼什麼是齊次座標?用齊次座標表示有什麼優勢? #二維點(x,y)的齊次座標表示為(hx,hy,h)。由此可以看出,一個向量的齊

Redis設計實現學習筆記()

一. 引言   《Redis設計與實現》一書主要分為四個部分,其中第一個部分主要講的是Redis的底層資料結構與物件的相關知識。   Redis是一種基於C語言編寫的非關係型資料庫,它的五種基本物件型別分別為:STRING,LIST,SET,HASH,ZSET。然而,對於每一種基本物件資料型別,底層都至少

《遊戲設計、原型開發——基於UnityC#從構思到實現》學習筆記

第一章:像設計師一樣思考 在這一章中,作者通過一個具體的桌面遊戲Bartok入手,介紹了遊戲設計與測試的基本流程。之後對比並分析了研究者們給遊戲進行的基礎定義。 Part 1: Bartok 1、 遊戲練習:Bartok Bartok是一個和Uno非常相

系統分析設計學習筆記

學習 掌握 應該 溝通 基本 最終 表示 對象 毫無 為什麽要學習這門課程?   “擁有一把錘子未必能成為建築師”。 這門課程學習的是面向對象分析和設計的核心技能的重要工具。對於使用面向對象技術和語言來,創建設計良好、健壯且可維護的軟件來說,這門課程所

C#委托事件學習筆記

調用函數 msdn http msd proc for reac .net 委托方 今天跟隨視頻學習了一下C#中最重要的一些概念之委托與事件。老楊的視頻講的還是挺深入淺出,不過剛接觸C#.NET的人還是朦朦朧朧,就像張子陽先生說的“每次見到委托和事件就覺得心裏別

轉:C#制作ORM映射學習筆記 自定義Attribute類

技術 sage 其中 username pac ont 學習 collect reat 之前在做unity項目時發現只能用odbc連接數據庫,感覺非常的麻煩,因為之前做web開發的時候用慣了ORM映射,所以我想在unity中也用一下ORM(雖然我知道出於性能的考慮這樣做事不

一起學ASP.NET Core 2.0學習筆記(): CentOS下 .net core2 sdk nginx、supervisor、mysql環境搭建

image dev 預覽 def star fig brush rest aspnet 作為.neter,看到.net core 2.0的正式發布,心裏是有點小激動的,迫不及待的體驗了一把,發現速度確實是快了很多,其中也遇到一些小問題,所以整理了一些學習筆記: 閱讀目

Spring4學習筆記:環境搭建插件安裝

str nag j2e 容器 獲取 相關 market 至少 ips 一:環境搭建 1:開發環境:JDK安裝、Eclipse安裝 2:數據庫:Mysql、Sequel Pro(數據庫可視化操作工具) 3:web服務器:Tomcat下載,並且把tomcat配置到Eclip

Maven學習筆記(Maven安裝環境變量配置)

maven學習筆記Maven包1.apache-maven-3.3.9-bin.zip2.apache-maven-3.3.9-src.zip(源碼) 配置環境變量 驗證: Maven學習筆記一(Maven安裝與環境變量配置)