c# 基础语法

c#基础语法基础语法第一个程序usingSystem;namespaceConsoleApp1{classProgram{staticvoidMain(string[]a

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

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 语句 您可以在一个 ifelse if 语句内使用另一个 ifelse 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"}

函数

函数的参数设置&传参行为

  • 参数可认为是外部需要函数帮忙处理的数据。
  • 外部通过传递参数的形式,将需要处理的数据交给函数处理。

函数返回值的设置

  • 函数返回值可以认为是外部调用某种行为后得到的一种反馈。

拓展– 参数修饰符

修饰符种类

  1. 无修饰符:如果一个参数没有用参数修饰符标记,则认为它将按值进行传递,这将意味着被调用的方法收到原始数据的一份副本
  2. out: 输出参数由被调用的方法赋值,因此按引用传递,如果被调用的方法没有给输出参数赋值,就会出现编译错误,也就是说,只要调用了,就必须给赋值。out 最大的用途就是调用者只使用一次方法的调用就能获得多个返回值。(在C#7.0中要实现一次方法的调用就能获得多个返回值,建议使用元组。是元组不是元祖),调用的是指针,是地址
  3. ref: 调用者赋初值,并且可以由被调用的方法可选的重新赋值(数据是按引用传递的)。如果被调用的方法未能给ref参数赋值,也不会有编译器错误。
  4. 了解即可params:这个参数修饰符允许将一组可变的数量的参数作为单独的逻辑参数进行传递, 方法只能有一个params修饰符,而且必须是方法的最后一个参数。
  5. outref的区别
    • 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();
        }
    }

    }
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119828.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • CentOS7在防火墙与端口上的操作

    CentOS7在防火墙与端口上的操作

    2021年10月19日
    29
  • 0817a

    0817ahttps://zhidao.baidu.com/question/1302230504869242619.html

    2022年6月1日
    40
  • Odin Inspector 系列教程 — 初识 OdinWindow「建议收藏」

    Odin Inspector 系列教程 — 初识 OdinWindow「建议收藏」笔者以往在使用一些插件的时候经常会看上面这种多炫酷的插件操作界面,常常羡慕不已,如今有了Odin,自己也可以简简单单的实现这些炫酷的效果了,下面笔者就带大家初识OdinWindow。创建一个Window不积跬步无以至千里,我们先从最简单的创建一个Window开始,只需要自定义一类并继承OdinEditorWindow即可publiccl…

    2022年7月21日
    17
  • 我是如何学习Android源码的

    我是如何学习Android源码的一连很长时间(从2017/06/09到2017/06/26)都在研究蓝牙,而且这只是文章发表的时间,再加上组织文章和研究的时间,不知不觉中就坚持这么久………,也写了蓝牙的三篇博客,而且篇幅很长如下:在这里就不放文章链接了,有需要的在我的文章中搜索即可,现在,是时候放空一下,给自己充充电了,来张美景,欣赏一下北京的晚霞。言归正传,先放上Android源码连接地址Android源码,至于研究源码的好处,

    2022年5月3日
    50
  • k8s(七)Pod调度[通俗易懂]

    k8s(七)Pod调度[通俗易懂]k8s概述定向调度亲和性调度污点和容忍Pod的调度概述在默认情况下,一个Pod在哪个Node节点上运行,是由Scheduler组件采用相应的算法计算出来的,这个过程是不受人工控制的。但是在实际使用中,这并不满足需求,因为很多情况下,我们想控制某些Pod到达某些节点上,那么应该怎么做?这就要求了解kubernetes对Pod的调度规则,kubernetes提供了四大类调度方式。自动调度:运行在哪个Node节点上完全由Scheduler经过一系列的算法计算得出。定向调度:NodeName、NodeS

    2022年8月11日
    3
  • python 列转行_SQL 行转列,列转行「建议收藏」

    python 列转行_SQL 行转列,列转行「建议收藏」SQL行转列,列转行行列转换在做报表分析时还是经常会遇到的,今天就说一下如何实现行列转换吧。行列转换就是如下图所示两种展示形式的互相转换行转列假如我们有下表:SELECT*FROMstudentPIVOT(SUM(score)FORsubjectIN(语文,数学,英语))通过上面SQL语句即可得到下面的结果PIVOT后跟一个聚合函数来拿到结果,FOR后面跟的科目是我们要…

    2022年6月22日
    53

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号