首页 > 编程语言 >【从Java转C#】第三章:对象和类型

【从Java转C#】第三章:对象和类型

时间:2023-05-24 15:06:09浏览次数:36  
标签:第三章 string C# age int student Java public 构造函数



目录

  • 对象和类型
  • ref和out
  • 参数的使用
  • 方法的重载
  • 属性
  • 构造函数
  • 匿名类型
  • 结构【Struct】
  • 弱引用(WeakReference)
  • 静态类
  • Object


对象和类型

ref和out

  • 双方都可以改变原始的地址
  • 初始值的不同
  • ref:需要赋予变量初始值
  • out:不需要赋予变量初始值
namespace ConsoleApp1
{
    class Program
    {

        static void Main(string[] args)
        {
            int i = 1;
            int j = 1;
            Swap(ref i, j);
            
            Console.WriteLine("i : " + i);
            Console.WriteLine("j : " + j);
            Console.ReadLine();
        }
        static void Swap(ref int i, int j)
        {
            i = 100;
            j = 101;
        }
    }
}

参数的使用

  • 命名参数:可以自己改变形参的顺序
Swap(lastName: "lastName", firstName: "firstName");
 static void Swap(string firstName, string lastName)
	{
   	 	Console.WriteLine(firstName);
   	 	Console.WriteLine(lastName);
	}
  • 可选参数:参数是可以选择的,但是可以选择的函数【可用可不用】必须在定义的参数后
static void Swap(string lastName, string firstName = "231")
    {
        Console.WriteLine(firstName);
        Console.WriteLine(lastName);
    }

方法的重载

  • 方法名相同、参数的个数或类型不同、同一个类中
  • C#限制
  • 两个方法不能仅在返回类型上有区别
  • 两个方法不能根据参数是声明为ref还是out来区分
void display(string name1)
 	{
        // *****
    }
 void display(string name1, string name2)
    {
        // *****
    }

属性

  • 正常的get/set
class student
    {
        private int _age;
        public int Age
        {
            get
            {
                return _age;
            }
            set
            {
                _age = value;
            }
        }
    }
  • 自动的实现:用于没有任何逻辑,单单实现功能而已
class student
    {
        private int _age;
        public int Age { get; set; }
    }

构造函数

  • 不书写任何的构造函数:引用类型:空引用、数值类型:0、bool:false
student st = new student();
 Console.WriteLine(st.age);
 class student
  {
     public int age;
  }
  • 书写带参的构造函数:在进行实例化时,就要实现带参
  • this:一般使用this来代表当前的属性
class student
    {
        public int age;
        public student(int age)
        {
            this.age = age;
        }
    }
  • 静态构造函数:构造函数只执行一次,只要创建类的对象,就会执行它
class student
    {
        public int age;
        static student()
        {
           // write your code
        }
    }
  • 构造函数调用其他的构造函数:有点方便~但我感觉多了容易乱、对于父类的调用,使用base
class student
    {
        private int age;
        private string name;
        public student(int age, string name)
        {
            this.age = age;
            this.name = name;
        }

        public student(int age)
        {
            this.age = age;
            this.name = "黄良帅";
        }
    }
======================================分割线=================================
   class student
    {
        private int age;
        private string name;
        public student(int age, string name)
        {
            this.age = age;
            this.name = name;
        }

        public student(int age):this(age, "黄良帅")
        {

        }
    }
  • 只读字段【readonly】:可以在构造函数中给其赋值,但不能在其他地方赋值
readonly int a = 1;
 a  = 2; // 错误,找不到a
 public student()
   {
        a = 2;
   }

匿名类型

  • new的一样,Type就一样
var captain = new { firstName = "hls", lastName = "s" };
var doctor = new { firstName = "s", lastName = "s" };
Console.WriteLine(captain.GetType());
Console.WriteLine(doctor.GetType());
  • 也可以直接实例化对象
var capion = new student();

结构【Struct】

  • 结构的特点
  • 结构是值类型,不是引用类型
  • 结构不支持继承
  • 对于结构,构造函数的工作方式有一些区别。尤其是编译器总是提供一个无参数的默认构造函数,它是不允许被替代的。
  • 使用结构,可以指定字段如何在内存中布局
  • 结构和类
  • 相同
doctor doc;
 student stu;
=============分割线==========
 doctor doc = new doctor();
 student stu = new student();
  • 不同
doctor doc;
 student stu;
 =============分割线==========
 doc.age = 1;
 stu.age = 1; // 错误:对于类来说,没有new【引用】,不能直接赋值

弱引用(WeakReference)

  • 个人感觉这一块和Java的GC回收差不多,基本参考强弱软虚
  • 这里等看了C#的垃圾回收再来填坑

静态类

  • 如果类只包含静态的方法和属性,这个类就是静态的
  • 一旦类被static修饰后,就不能使用实例创建
student stu = new student(); // 会报错
 static class student
    {
        public int age;
        public string name;
    }

Object

  • ToString 虚方法
  • Equals
  • GetHashCode
  • GetType
  • MemberwiseClone 复制对象


标签:第三章,string,C#,age,int,student,Java,public,构造函数
From: https://blog.51cto.com/u_16127529/6340829

相关文章

  • 【Kafka从入门到成神系列 四】Kafka 消息丢失及 TCP 管理
    ......
  • C#开发环境配置-VS2017安装使用
    工欲善其事,必先利其器传说中的世界第一编辑器目录1.下载2.安装2.1点击下图2.2进行解析2.3启动3.自己的第一个程序4.问题1.下载资源是楼主花钱在淘宝买的,现在免费送给大家关注公众号”爱敲代码的小黄“,回复:VS2017,即可收到网盘链接 2.安装2.1点击下图2.2进行解析进度条加......
  • 【Kafka从入门到成神系列 八】Kafka 多线程消费者及TCP连接
    ......
  • C#设计模式——上
    文章目录设计模式序言-四大发明之活字印刷——面向对象思想的胜利四大发明之活字印刷——面向对象思想的胜利第一章面试受挫——代码无错就是好?第二章代码规范、重构第三章复制VS复用第四章业务的封装第五章体会简单工厂模式的美妙设计模式序言-四大发明之活字印刷——面向......
  • rpmrebuild 提取spec重新打包rpm示例
    使用rpmrebuild命令重新编辑rpm包rpmrebuild-p-eseatunnel_3_1_4_0_315-2.3.1.3.1.4.0-315.x86_64.rpm编辑完成并保存重新生成repo源createrepo.清除缓存目录下的软件包及旧的headersyumcleanall重新生成缓存yummakecache......
  • LeetCode 98. 验证二叉搜索树
    classSolution{public:vector<int>dfs(TreeNode*root)//依次返回是否是二叉搜索树,最大值最小值{vector<int>res{1,root->val,root->val};if(root->left){autol=dfs(root->left);res[1]=max(res......
  • macos 链接windows 共享打印机
    WINDOWNS上操作:1.在windowns上安装打印机,共享打印机2.安装lpd,打开控制面板>启用或者关闭Windows功能>打印和文件服务>勾选LPD打印服务 MACOS上操作:1.打开系统偏好和设置>打印机与扫描仪  2.添加打印机1)加号添加打印机2......
  • HEUCPC2021
    stralReflection在\([1,n]\)上支持如下操作:操作一:学习一个新的技能——清除\([l,r]\)内所有的陨石操作二:给定一个点集\(k\)代表陨石出现在这些位置,询问最少需要使用多少技能才能清除所有陨石(不能使用当前没有学习的技能)共操作\(m\)次\(\sumk\leq1e5\)\(m\leq1e5\)......
  • Python自动化办公对每个子文件夹的Excel表加个表头(Excel不同名且有xls文件)
    大家好,我是皮皮。一、前言上一篇文章,我们抛出了一个问题,这篇文章来进行解答。如果针对子文件夹下不同的Excel表名,而且Excel表格类型包括了.xls和.xlsx应该如何处理?要求一步到位。二、实现过程其实这里依靠【ChatGPT】给的答案,只需要修改其中一行代码就可以搞定了,如下所示:imp......
  • CentOS 7.6 64 位系统Linux 下升级Nginx1.24.0版本
    以下是在CentOS7.664位系统上升级Nginx1.19.9到1.24.0的步骤。1.1、先安装gcc-c++编译器yuminstallgcc-c++yuminstall-yopensslopenssl-devel1.2、再安装pcre包。yuminstall-ypcrepcre-devel1.3、再安装zlib包yuminstall-yzlibzlib-devel......