首页 > 其他分享 >.NET教程 - 基础类型

.NET教程 - 基础类型

时间:2022-09-27 08:33:04浏览次数:48  
标签:教程 Console Enum System 实例 WriteLine 类型 NET public

更新记录
转载请注明出处:
2022年9月27日 发布。
2022年9月26日 从笔记迁移到博客。

System.Object

System.Object主要成员

public class Object
{
    //构造函数
    public Object();
    //析构器
    protected virtual void Finalize();
    //获得类型
    public extern Type GetType();
    //获得Hash值
    public virtual int GetHashCode();
    //比较相等
    public virtual bool Equals (object obj);
    //转为字符串
    public virtual string ToString();
    //成员复制
    protected extern object MemberwiseClone();
    //比较相等(静态)
    public static bool Equals (object objA, object objB);
    //比较引用相等(静态)
    public static bool ReferenceEquals (object objA, object objB);
}

Equals, ReferenceEquals, and GetHashCode方法

说明

overriding Equals()时记得override GetHashCode()

当把类型用在HashTable和Dictionary<T,T>中时,记得重写GetHashCode()

重写GetHashCode()最佳实践

必须保证:相等的对象必须有相等的hash codes

如果a.Equals(b)则必须a.GetHashCode() == b.GetHashCode()

必须保证:GetHashCode()的返回值不会受到对象状态的影响

必须保证:GetHashCode()不可以抛出任何异常,该方法必须执行成功

性能:Hash codes必须是唯一的

性能:GetHashCode() should be optimized for performance

Equals和==的差异

==使用ReferenceEquals

实例:

object x = 3;
object y = 3;
Console.WriteLine (x == y);        // False
Console.WriteLine (x.Equals (y));  // True

GetHashCode

GetHashCode 主要用于基于哈希表的字典(hashtable-based dictionaries)

比如:System.Collections.Generic.Dictionary 和 System.Collections.Hashtable

实例:

public override int GetHashCode() => =>
                    HashCode.Combine(
                        Longitude.GetHashCode(),
                        Latitude.GetHashCode());

ToString()方法

public virtual string ToString();

注意:如果没有override ToString,默认返回类型名称

可以在子类中重写ToString()方法

最佳实践

可以返回有用的面向开发人员的诊断字符串时,记得重写ToString方法

重写ToString方法不要返回空字符串/NULL,返回简短的信息即可

不要在ToString方法中抛出异常和修改对象的状态

需要支持多种文化可以考虑使用IFormattable接口

实例:override ToString

public class Panda
{
    public string Name;
    //override结合方法体
    public override string ToString() => Name;
}
//使用
Panda p = new Panda { Name = "Petey" };
Console.WriteLine (p); // Petey

GetType()方法

获得用户类型注意

Object.GetType()方法   在运行时计算
typeof()运算            在编译时静态计算

当涉及泛型类型参数时由JIT编译器解析

实例:GetType获得类型信息

using System;
namespace ConsoleApp2
{
    public class Point { public int X, Y; }

    class Program
    {
        static void Main(string[] args)
        {
            Point p = new Point();
            Console.WriteLine(p.GetType().Name); // Point
            Console.WriteLine(typeof(Point).Name); // Point
            Console.WriteLine(p.GetType() == typeof(Point)); // True
            Console.WriteLine(p.X.GetType().Name); // Int32
            Console.WriteLine(p.Y.GetType().FullName); // System.Int32

            //wait
            Console.ReadKey();
        }
    }
}

System.Console

Console作用

The static Console class handles standard input/output for console-based applications

the input comes from the keyboard via Read、ReadLine、ReadKey

the output goes to the text window via Write、WriteLine

control the window’s position and dimensions with the properties WindowLeft、WindowTop、WindowHeight、WindowWidth

change the BackgroundColor and ForegroundColor properties

manipulate the cursor with the CursorLeft, CursorTop, and CursorSize properties

实例:设置控制台窗口的Title标题

Console.Title = "Panda Test";

实例:设置控制台窗口的宽度

Console.WindowWidth = Console.LargestWindowWidth;

实例:设置背景色和前景色

Console.ForegroundColor = ConsoleColor.Green;
Console.BackgroundColor = ConsoleColor.Red;

实例:设置输出到文本中,而不是控制台

System.IO.TextWriter oldOut = Console.Out;
// Redirect the console's output to a file:
using (System.IO.TextWriter w = System.IO.File.CreateText("e:\\output.txt"))
{
    Console.SetOut(w);
    Console.WriteLine("Hello world");
}
// Restore standard console output
Console.SetOut(oldOut);

实例:读取命令行的一个字符

注意:需要转为char后再使用

char userInputChar = (char)Console.Read();
Console.WriteLine(userInputChar);

实例:读取命令行的一行字符串

string userInputString = Console.ReadLine();
Console.WriteLine(userInputString);

实例:读取用户按下的按键

ConsoleKeyInfo userInputKey = Console.ReadKey();

if(userInputKey.Key == ConsoleKey.Enter)
{
    Console.WriteLine(userInputKey.KeyChar);
}

或者

if ((Console.ReadKey()).Key == ConsoleKey.Enter)
{
    //Do Something
}

监听键盘方向键

while (true)
{
    switch (Console.ReadKey().Key)
    {
        case ConsoleKey.UpArrow:
            Console.WriteLine("UpArrow");
            break;
        case ConsoleKey.DownArrow:
            Console.WriteLine("DownArrow");
            break;
        case ConsoleKey.LeftArrow:
            Console.WriteLine("LeftArrow");
            break;
        case ConsoleKey.RightArrow:
            Console.WriteLine("RightArrow");
            break;
    }
}

输出铺满整个Console行的*号

string stars = "*".PadRight(Console.WindowWidth - 1, '*');
Console.WriteLine(stars);

System.Environment

Environment提供的主要功能

Files and folders: CurrentDirectory, SystemDirectory, CommandLine

Computer and operating system: MachineName, ProcessorCount, OSVersion, NewLine

User logon: UserName, UserInteractive, UserDomainName

Diagnostics: TickCount, StackTrace, WorkingSet, Version

set/access OS environment variables:

使用下列三个方法:

GetEnvironmentVariable

GetEnvironmentVariables

SetEnvironmentVariable

实例:目录和文件相关

实例:获得当前所在目录

Console.WriteLine(Environment.CurrentDirectory);

实例:获得System所在目录

C:\Windows\system32

Console.WriteLine(Environment.SystemDirectory);

实例:输出命令行的内容(参数和参数值)

使用Environment.CommandLine属性

注意:结果中包含程序名称

//输入内容
// ./ ConsoleApp1.exe - arg1 value1 - arg2 value2
//输出内容
//arg1 = value1
//arg2 = value2

代码:

//直接输出全部内容
Console.WriteLine(Environment.CommandLine);

//将参数和参数值分割出来
string[] userCommandArgs = Environment.CommandLine.Split(' ');
//跳过第1个值(程序名称)
for (int i = 1; i < userCommandArgs.Length-1; i+=2)
{
    //跳过-符号
    Console.WriteLine($"{userCommandArgs[i].Substring(1)} = {userCommandArgs[i+1]}");
}

实例:获得系统和计算机信息

实例:判断是否64位操作系统

Console.WriteLine(Environment.Is64BitOperatingSystem);

实例:判断是否支持64位的处理器

Console.WriteLine(Environment.Is64BitProcess);

实例:获得计算机名称

Console.WriteLine(Environment.MachineName); //WINDOWSSERVER

实例:获得处理器核心数量

Console.WriteLine(Environment.ProcessorCount); //4

实例:获得操作系统版本信息

Console.WriteLine(Environment.OSVersion); 
//Microsoft Windows NT 6.2.9200.0

实例:新行(跨平台)

Console.WriteLine(Environment.NewLine);

实例:用户信息

实例:获得当前用户的用户名

Console.WriteLine(Environment.UserName); //Administrator

实例:获得当前用户的域用户名

Console.WriteLine(Environment.UserDomainName);

System.AppContext

说明

AppContext是一个静态类型

实用成员:

BaseDirectory 应用启动的目录地址

TargetFrameworkName 框架的名称和版本

实例:获得应用启动的目录地址

Console.WriteLine(AppContext.BaseDirectory);

实例:框架的名称和版本

Console.WriteLine(AppContext.TargetFrameworkName);

System.Enum

作用

Providing type unification for all enum types

Defining static utility methods

实例:具体Enum类型转为System.Enum类型

enum Size { Small, Medium, Large }
System.Enum val = Size.Large;
Console.WriteLine(val.GetType().FullName); //ConsoleApp3.Size
Console.WriteLine(val.ToString()); //Large

枚举类型转换(Enum Conversions)

There are three ways to represent an enum value:

As an enum member

As its underlying integral value

As a string

枚举类型转为整数类型(Enum-to-integral conversions)

使用强制转换

实例:

[Flags]
public enum BorderSides { Left = 1, Right = 2, Top = 4, Bottom = 8 }
int i = (int) BorderSides.Top; // i == 4
BorderSides side = (BorderSides) i; // side == BorderSides.Top

实例:获得Enum具体类型的底层整数类型

enum Size { Small, Medium, Large }
Enum.GetUnderlyingType(typeof(Size)).Name

整数类型转为枚举类型(Integral-to-enum conversions)

直接使用强制转换即可

本质是转为Object类型后再转为Enum类型

实例:

enum Size { Small, Medium, Large }
Size result = (Size)2;
Console.WriteLine(result); //Large

字符串类型转为枚举类型(String conversions)

使用Enum.Parse静态方法

实例:

enum Size { Small, Medium, Large }
Size result = (Size)Enum.Parse(typeof(Size), "Large");
Console.WriteLine(result); //Large

枚举Enum的成员(Enumerating Enum Values)

使用Enum类型的GetNames静态方法获得具体Enum值的名称

使用Enum类型的GetValues静态方法获得具体Enum值

实例:获得具体Enum值

enum Size { Small, Medium, Large }
foreach (Enum item in Enum.GetValues(typeof(Size)))
{
    Console.WriteLine(item);
    Console.WriteLine((int)(object)item);
}

实例:获得具体Enum值的名称

enum Size { Small, Medium, Large }
foreach (string item in Enum.GetNames(typeof(Size)))
{
    Console.WriteLine(item);
}

Enum本质

在编译器内部定义的枚举类型都被转为System.Enum类型的子类
而枚举值转为子类的成员
当引用子类的成员方法时会进行一次装箱操作

System.Guid

Guid结构(Guid Struct)

实例:生成Guid

Guid g = Guid.NewGuid();
Console.WriteLine(g.ToString());

标签:教程,Console,Enum,System,实例,WriteLine,类型,NET,public
From: https://www.cnblogs.com/cqpanda/p/16730775.html

相关文章

  • CSCN上的Mrakdown教程(Markdown基础用法)
    链接原文Markdown标题Markdown的标题有两种格式。使用=和-标记一级和二级标题我展示的是一级标题我展示的是二级标题1232.使用#号标记使用#号可表......
  • 浮点类型及使用细节
    单精度float双精度double浮点数再机器中存放形式简单说明,浮点数=符号位+指数位+尾数位尾数部分可能丢失,造成精度损失 1、java浮点类型有固定的范围和字段长度,......
  • docker实战教程(十一):容器数据卷
    --privileged=truedocker挂载主机目录访问,如果出现cannotopendirectory:Permissiondenied解决办法:在挂载目录后多加一个--privileged=true参数即可如果是centos7安全......
  • 彻底搞清楚.net core,.net framework,asp.net core等的概念
    如图:先上一张图,此图经常见到总体的脉络结构大致都是这样,自下而上,越往下越是基础层,其中.netstandardlibrary定义了一些列的标准函数接口,由不同框架去实现。也就是net......
  • Pytorch教程[持续更新...]
    前言这是一个Pytorch的学习笔记,同时加入了一点个人理解。写这个博客的初衷是为了让我更好的在课上摸鱼,复习视频来自我是土堆强烈推荐Dataset类代码实战这一步我们......
  • asp.net mvc返回Json数据
    注意返回一个自定义的object数组//01返回一个自定义的object数组publicActionResultIndex(){varres=newJsonResult();varname="小华";varag......
  • 数据类型与逻辑运算
    数据类型与逻辑运算数据类型数据类型分为整型、浮点型、列表、字符串和字典整型Int大白话就是整数应用场景:年龄、班级人数eg:name='kevin'age=18stu_......
  • sdn实验(1)——mininet安装及可视化工具miniedit的使用
    一、实验目的安装mininet及使用miniedit二、实验要求安装虚拟机,逐步配置好环境,并初步使用miniedit完成可视化工具的编辑三、具体步骤1.安装Ubuntu虚拟机,......
  • .NET6 JWT(生成Token令牌)
    一、Net6环境下的.netcore项目里如何使用JWT。第一步,在Nuget引入JWT、Microsoft.AspNetCore.Authentication.JwtBearer这两个NuGet包 第二步,在appsettings.......
  • .net6 使用 JWT
    安装Nuget包Microsoft.AspNetCore.Authentication.JwtBearerProgram.cs里添加JWT//添加jwt验证:builder.Services.AddAuthentication(JwtBearerDefaults.Authent......