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

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

对象和类型

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 复制对象


相关文章
|
7天前
|
Java 编译器
<Java> 类和对象专题大汇总.(学不会包退)
<Java> 类和对象专题大汇总
17 0
|
2天前
|
XML Java 数据格式
Java一分钟之-JAXB:Java对象到XML绑定
【6月更文挑战第1天】Java Architecture for XML Binding (JAXB) 是Java平台标准,用于自动转换Java对象和XML。它通过注解实现声明式映射,简化XML处理。本文介绍了JAXB的基本使用、常见问题和最佳实践,包括对象到XML(Marshalling)和XML到对象(Unmarshalling)过程,并通过示例展示如何在Java类和XML之间进行转换。注意类型匹配、注解冲突和JAXB上下文创建等问题,以及如何优化性能和避免循环引用。
9 3
|
3天前
|
存储 Java
Java语言中的类与对象:深入理解与实践
Java语言中的类与对象:深入理解与实践
|
3天前
|
存储 Java
Java类与对象的技术性文章
Java类与对象的技术性文章
20 0
|
4天前
|
Java
类与对象:Java面向对象编程的基石
类与对象:Java面向对象编程的基石
|
4天前
|
存储 Java API
Java的匿名对象
Java的匿名对象
|
4天前
|
Java
Java的对象的产生与使用
Java的对象的产生与使用
|
4天前
|
存储 Java
Java的对象的比较
Java的对象的比较
|
5天前
|
Java 开发者
Java中的对象:深入解析与实践
Java中的对象:深入解析与实践
|
5天前
|
Java 程序员 数据安全/隐私保护
Java面向对象编程:类和对象详解
Java面向对象编程:类和对象详解
16 0