c#结构体-多态复习(1)

原创 2016年08月28日 20:11:07
1.get访问器与方法体类似,它必须返回属性类型的值,而set访问器类似于放回类型为void的方法,它使用成为value的隐式参数,此参数的类型时属性的类型。

2.结构的特点:
结构是值类型向方法传递结构时,结构时通过值的方式传递的,而不是作为引用传递的。
结构的实例化可以不同new运算符结构可以声明构造函数,但他们必须带有参数
一个结构不能从另一个结构继承
结构可以实现接口
在结构中初始化实例字段是错误的


3.结构的使用和类的使用区别
using System;
class MyClass
{
    public int id;
    public mystr str;  //作为成员变量
}


public struct  mystr  //结构体
{
    public int id;
    public mystr(int idd=0)
    {
        id = idd;
    }
}
class Test
{
    public static void change(MyClass my1)
    {
        my1.id = 10;
    }
    public static void chan(mystr my2)
    {
        my2.id = 10;
    }
    public static void Main(string[] ags)
    {
        MyClass my = new MyClass();
        Console.WriteLine(my.id);
        change(my);  //这个是引用类型
        Console.WriteLine(my.id);


        //mystr str=new mystr(11);
        mystr str;  //定义结构体
        str.id = 0;  //注意因为是值类型,作为局部变量所以需要初始化才能使用
        Console.WriteLine(str.id);
        chan(str);   //结构体传递的是值
        Console.WriteLine(str.id);


        Console.WriteLine(my.str.id); //注意这个没有手动初始化
    }
}


4.c#中的多态
using System;
class A
{
    public  int a;
    public  int b;
    public virtual int Add()
    {
        return a+b;
    }
}
class B : A
{
    public override int Add()  //重写基类方法
    {
        Console.WriteLine(base.Add()); //调用基类方法
        int x = 5;
        int y = 7;
        return x + y;
    }
}
class C : A
{
    public override int Add()
    {
        int x = 4;
        int y = 7;
        return x + y;
    }
}
class D: A
{
    public override int Add()
    {
        Console.WriteLine(base.Add());//子类中调用基类方法
        int x = 3;
        int y = 7;
        return x + y;
    }
}
class Test
{
    public void show(A a)  //通过基类对象来调用子类方法(多态)
    {
        Console.WriteLine(a.Add());
    }
    public static void Main(string[] args)
    {
        B b = new B();   //创建对象
        C c = new C();
        D d = new D();
        Test t = new Test();
        t.show(b);
        t.show(c);
        t.show(d);
    }
}


5.c#中的抽象类
C#和C++一样,如果一个类派生于一个抽象类但是并没有为基类的所有抽象方法提供实现代码,那么这个派生类也被认为是一个抽象类。C#要求这种类型的类也必须在类的头部显示地使用abstract关键字进行声明。
using System;
abstract class A  //抽象类
{
    public  int a;
    public  int b;
    public abstract int Add();  //抽象方法
}
class B : A
{
    public override int Add()  //重写基类方法
    {
        
        int x = 5;
        int y = 7;
        return x + y;
    }
}


class Test
{
    public void show(A a)  //通过基类对象来调用子类方法(多态)
    {
        Console.WriteLine(a.Add());
    }
    public static void Main(string[] args)
    {
        B b = new B();
        Test t = new Test();
        t.show(b);
    }
}

linux 中 C 语言的使用 -- 结构体多态

在 Linux 内核代码,特别是驱动代码中经常见到的用法是使用一个标准结构,后面的代码基于这个结构来实现,类似面向对象的多态特性。 在 C 语言里面借助结构体和函数指针实现的这个功能,这里我们写...
  • jingxia2008
  • jingxia2008
  • 2014年05月18日 18:41
  • 2093

boost::serialization 多态(polymorphic)序列化技巧及分析

假如某段程序中我们只记录了一些虚基类指针对象,
  • meteora1005
  • meteora1005
  • 2014年06月16日 16:48
  • 1068

对多态的理解(附经典练习题)

(以下综合了多篇多态的文字,总结而得) 定义:指不同类的对象对同一函数做出不同响应。 实现方式:1.继承父类,方法重写(包括接口实现);2.同一个类中进行方法重载。 存在的三个必...
  • a_long_
  • a_long_
  • 2016年07月28日 15:57
  • 2218

编译复习2

语句级控制结构   用来控制语句的执行顺序  三中语句级控制  顺序 分支 循环 顺序是按程序计数器提供的顺序获得指令的一种抽象。 选择和重复是对显式修改程序计数器的值(无条件转移和条件转移)的抽...
  • qq403198745
  • qq403198745
  • 2015年06月06日 12:24
  • 319

C#多态分析

理解多态首先是:   C#继承(C# 编程指南) 类可以从其他类中继承。这是通过以下方式实现的:在声明类时,在类名称后放置一个冒号,然后在冒号后指定要从中继承的类(即基类)。例如:...
  • truelove12358
  • truelove12358
  • 2013年12月05日 11:23
  • 953

C#——面向对象之多态

之前在学习java时,就碰到过这个问题,当时一知半解,最近在巩固C#的知识,遇到这个问题,希望本次彻底搞清楚。                                            ...
  • u012155427
  • u012155427
  • 2015年01月22日 19:39
  • 323

C#中多态性的理解

在面向对象编程范式中,多态性往往表现为"一个接口,多个功能"。 多态性可以是静态的或动态的。 在静态多态性中,函数的响应是在编译时发生的。 函数重载 运算符重载 在动态多态性中,函数的响...
  • Silk2018
  • Silk2018
  • 2017年04月27日 17:04
  • 661

[C#]利用接口实现多态性浅析

所谓的多态性,个人认为说的是相同的程序接受几段毫不相同的参数而能正常的运行。而在C#中利用接口实现多态性我觉得并不是太严谨。我认为要真正实现多态性离不开泛型。 举个小例子: public ...
  • hsppl
  • hsppl
  • 2011年09月05日 20:34
  • 1252

学习C# 继承 封装 多态

C# 中访问修饰符: Private:只有类本身能存取. Protected:类和派生类可以存取. Internal:只有同一个项目中的类可以存取...
  • qq_33481237
  • qq_33481237
  • 2016年02月13日 15:04
  • 1855

C#基础-----抽象类实现多态

什么是抽象类:光说不做,不能被实例化的类 抽象类的特点: 1,需要用abstract关键字标记 2,抽象方法不能有任何方法实现,所以没有方法体 3,抽象成员必须包含在抽象类中 4,由于抽象成...
  • shang1010
  • shang1010
  • 2015年06月09日 15:12
  • 503
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c#结构体-多态复习(1)
举报原因:
原因补充:

(最多只允许输入30个字)