首页 > 编程语言 > 详细

C#语言基础-4 对象和类型2

时间:2020-03-26 23:49:44      阅读:104      评论:0      收藏:0      [点我收藏+]

结构
  结构的声明方式、属性、方法、构造函数等跟类一样,只是关键字是struct,结构不支持继承
  结构是值类型,不是引用类型。它们存储在栈中或存储为内联,如果它们是存储在堆中的 另一个对象的一部分),其生存期的限制与简单的数据类型一样。 
  因为结构是值类型,所以new运算符与类和其他引用类型的工作方式不同。new运算符并不分配堆中的内存,而是只调用相应的构造函数,根据传送给它的参数,初始化所有的字段
  结构派生自System.ValueType类,System.ValueType类又派生于System.Object类,所以结构也可以使用System.Object的方法,也可以重写。下面例子中结构的声明及赋值、重写基类ToSting()方法都是合法的。

    public struct Person
    {
        public string Name;
        public int Age;
        public override string ToString()
        {
            return base.ToString();
        }
    }
            Person person= new Person();
            person.Name = "Liu";
            person.Age = 12;

            Person person1;
            person1.Name = "Liu";
            person1.Age = 12;

    对于结构构造函数的工作方式的区别。编译器总是提供一个无参数的默认构造函数,而且不允许替换。默认构造函数总是给结构的字段初始化值,所以字段的的初始化值不能绕过默认构造函数。像下面的这种初始化值的方式是错误的。

    public struct Person
    {
        public string Name="Liu";
        public int Age=12;
    }

弱引用
  当实例化一个类或者结构时,只要有代码引用它就形成强引用。强引用意味着GC不会清理实例使用的内存,但当实例对象很大时,又不经常访问时,此时用弱引用比较合理。
  弱引用使用WeakRefernce类创建,因为对象可以在任意时刻被回收,因此使用前必须确认它存在。
  因为Target返回的是 Object类型,所以不必须强制转换成需要的类型。

            WeakReference weak = new WeakReference(new Person());
            Person person;
            if (weak.IsAlive)
            {
                person = weak.Target as Person;//转换成需要的类型
                person.Name = "Liu";
            }

部分类
  partial关键字允许把类、结构或接口放在多个文件中。一般情况下,一个类全部写在单个文件中。但有时需要多人使用到一个类,此时就需要写到多个文件中了。
  语法定义:把partial放在class/struct/interface的前面即可。
  如果声明类时使用了下面的关键字,这些关键字就必须应用于同一个类的所有部分。public/private/protected/internal/abstract/sealed/new/一般约束
  部分类在编译时会合并到一起,所以注释或者特性等只要在任意一个部分类上写明即可。

/// <summary>
/// 测试使用
/// </summary>
partial class Person
{
}
partial class Person: IPerson
{
} 

静态类
  如果类只包含静态的方法和静态的属性,那么该类就是静态的。

Object类
Object类是所有类的基类,所以Object提供了很多的公共方法。
例如:ToString()、Equals()等。


扩展方法
如果有类的源代码,继承就是给对象添加功能的好方法。如果没有,可以使用扩展方法。
扩展方法是静态方法,对于扩展方法,第一个参数是要扩展的类型,它放在this关键字的后面。这告诉编译器,这个方法是类型的一部分。

public static class Test
{
    public static string ToString1(this decimal x)
    {
        return "$" + x;
    }
}
            decimal x = 0.123M;
            x.ToString1();

 

C#语言基础-4 对象和类型2

原文:https://www.cnblogs.com/liuxiansheng1024/p/12571055.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!