1、结构功能特性? 实现代码?
结构用struct关键字定义的,与类类似,但有本质区别。结构实质是一个值类型,它不需要对分配的。
结构的特性:
(1)、结构作为参数传递时,是值传递。
(2)、结构的构造函数必须带参数的。
(3)、结构实例化可以不用new的。
(4)、结构不能继承,但是可以实现接口。
(5)、结构中不能初始化实例字段。
例:

using System;
using System.Collections.Generic;
using System.Text; namespace TestStruct
{
class Program
{
public struct Circle //定义一个圆
{
private const double pi = 3.1415926; public double radius; //半径 /// <summary>
/// 构造函数
/// </summary>
public Circle(double r)
{
radius = r;
}
/// <summary>
/// 面积
/// </summary>
public double CArea()
{
return 3.14 * radius * radius;
} } static void Main(string[] args)
{
Circle circle1; //不用new实例化 circle1.radius = ; Console.WriteLine("圆面积为:" + circle1.CArea()); Circle circle2 = new Circle(); //用new实例化 Console.WriteLine("圆面积为:" + circle2.CArea()); Console.ReadLine();
}
}
}
using System;
using System.Collections.Generic;
using System.Text; namespace TestStruct
{
class Program
{
public struct Circle //定义一个圆
{
private const double pi = 3.1415926; public double radius; //半径 /// <summary>
/// 构造函数
/// </summary>
public Circle(double r)
{
radius = r;
}
/// <summary>
/// 面积
/// </summary>
public double CArea()
{
return 3.14 * radius * radius;
} } static void Main(string[] args)
{
Circle circle1; //不用new实例化 circle1.radius = ; Console.WriteLine("圆面积为:" + circle1.CArea()); Circle circle2 = new Circle(); //用new实例化 Console.WriteLine("圆面积为:" + circle2.CArea()); Console.ReadLine();
}
}
}

2、什么是委托? 特点? 何时使用委托而不使用接口? 如何声明、实例化和使用委托?
 
(1)、委托是一个类,它定义了方法的类型,可以讲方法当做另一个方法的参数。避免在程序中使用分支,
 
程序扩展性更好。
例子:

class Program
{
public delegate void PrinteDelegate(string name); private static void PrinteEnglish(string name)
{
Console.WriteLine("Your Name: " + name);
} private static void PrinteChinese(string name)
{
Console.WriteLine("你的大名:" + name);
} private static void Printe(string name, PrinteDelegate MakeGreeting)
{
MakeGreeting(name);
} static void Main(string[] args)
{
Printe("Sam Young", PrinteEnglish); Printe("白杨树", PrinteChinese); Console.ReadLine();
}
}
class Program
{
public delegate void PrinteDelegate(string name); private static void PrinteEnglish(string name)
{
Console.WriteLine("Your Name: " + name);
} private static void PrinteChinese(string name)
{
Console.WriteLine("你的大名:" + name);
} private static void Printe(string name, PrinteDelegate MakeGreeting)
{
MakeGreeting(name);
} static void Main(string[] args)
{
Printe("Sam Young", PrinteEnglish); Printe("白杨树", PrinteChinese); Console.ReadLine();
}
}

(2)、委托类似于C++ 函数指针,但它是类型安全的。
 
委托允许将方法作为参数进行传递。
 
委托可用于定义回调方法。
 
委托可以链接在一起;例如,可以对一个事件调用多个方法。
 
方法不需要与委托签名精确匹配。有关更多信息,请参见协变和逆变。
 
C# 2.0 版引入了匿名方法的概念,此类方法允许将代码块作为参数传递,以代替单独定义的方法。
 
使用委托,我觉得应该在需要分支调用不同方法时使用。但是例如工厂模式中,根据分支实例化不同的类
 
,这时就用接口。
 
 
委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动
 
态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩
 
展性。
 
3、什么是部分类/分部类? 哪些功能特性? 实现代码? 适用场合? 需遵循几个规则?
分部类就是将一个类用partial关键字,分成好几个独立文件,但实质还是一个类。一般当一个类行数太多或者某些功能比较独立可以用分部类,最常见就是窗体Form.cs和Form.designer.cs。
一般需遵循如下规则:
(1)、必须使用partial 关键字
 
(2)、虽然有不同的部分,但是各个部分必须具有相同的可访问性,如public、private 等
 
(3)、如果将任意部分声明为抽象的、密封的,则整个类型都被视为抽象的、密封的
 
(4)、如果任意部分声明继承基类时,则整个类型都将继承该类
 
(5)、 各个部分可以指定不同的基接口,最终类型将实现所有分部声明所列出的全部接口
 
(6)、在某一分部定义中声明的任何类、结构或接口成员可供所有其他部分使用
 
(7)、嵌套类型可以是分部的,即使它们所嵌套于的类型本身并不是分部的也如此。

C#类和结构(1)的更多相关文章

  1. C#基础回顾(二)—页面值传递、重载与重写、类与结构体、装箱与拆箱

    一.前言 -孤独的路上有梦想作伴,乘风破浪- 二.页面值传递 (1)C#各页面之间可以进行数据的交换和传递,页面之间可根据获取的数据,进行各自的操作(跳转.计算等操作).为了实现多种方式的数据传递,C ...

  2. swift学习笔记3——类、结构体、枚举

    之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...

  3. java 深入技术七(类的结构和反射)

    1.java反射(reflect) java 类的结构 java反射机制就是把java类按结构分解,每一部分对应特定的反射类 java反射机制允许运行时加载,探知和使用在编译期间完全未知的classe ...

  4. 【JavaScript】获取未知类的结构

    目录结构: // contents structure [-] 为什么需要获取类的结构 关于JavaScript中的类 定义类的方法 第一种 第二种 DEMO HTML页面 date文件 注意事项 参 ...

  5. Swift3.0P1 语法指南——类和结构体

    原档:https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programmi ...

  6. 【Swift学习】Swift编程之旅---类和结构体(十三)

    与其他编程语言所不同的是,Swift 并不要求你为自定义类和结构去创建独立的接口和实现文件.你所要做的是在一个单一文件中定义一个类或者结构体,系统将会自动生成面向其它代码的外部接口. 注意:通常一个类 ...

  7. swift学习笔记之-类和结构体

    //类和结构体 import UIKit //类和结构体 /* 1.枚举enum.结构体struct和String.Array.Dictionary类型,都属于值传递类型,被赋值给新的常量或变量时传递 ...

  8. swift 类和结构体

    1:类和结构体定义 类和结构体分别通过关键字class 和struct定义. swift的编码风格是类class和结构体struct名字使用大写字母开头的匈牙利表示法,相反的.类的方法和属性则用小写字 ...

  9. Swift面向对象基础(上)——Swift中的类和结构体(上)

    学习来自<极客学院> import Foundation //1.定义类和结构体 /* [修饰符]calss 类名{ 零到多个构造器 零到多个属性 零到多个方法 零到多个下标 } 修饰符可 ...

  10. C#基础知识系列三(类和结构体、String和StringBuilder、equals和==)

    前言 这一节主要来了解一下类和结构体之间的异同点.以及针对String和StringBuilder的用法.equals和==,其实可以看出很多地方都用到了上一节的值类型和引用类型.堆栈和装箱拆箱操作吧 ...

随机推荐

  1. 344. Reverse String【easy】

    344. Reverse String[easy] Write a function that takes a string as input and returns the string rever ...

  2. 从‘void*’到‘int’的转换损失精度

    在CentOS6.2 64位下编译一下代码,不通过,提示 ./11_2.cpp: In function ‘int main(int, char**)’:./11_2.cpp:28: 错误:从‘voi ...

  3. java 中的valueOf方法和强转

    case1:Object 对象转String 需要强调的是String.valueOf()方法,当参数为类型是object,且值时null的时候他的处理方式 public static String ...

  4. 【转】SQL SERVER 2005 数据库状态为“可疑”的解决方法

    --MyDB为修复的数据名 USE MASTER GO SP_CONFIGURE 'ALLOW UPDATES',1 RECONFIGURE WITH OVERRIDE GO ALTER DATABA ...

  5. YII用户注冊和用户登录(二)之登录和注冊在视图通过表单使用YII小物件并分析

    2 登录和注冊在视图通过表单使用YII小物件并分析 <?php $form = $this -> beginWidget('CActiveForm', array( 'enableClie ...

  6. CentOS上使用Squid+Stunnel搭建代理服务器教程

    这篇文章主要介绍了CentOS上使用Squid+Stunnel搭建代理服务器教程,同时文中也介绍了用户认证的方法,适合于多用户共同使用代理,这种功能在国内用还是比较exciting的~需要的朋友可以参 ...

  7. Mongodb 与 MySQL对比

    在数据库存放的数据中,有一种特殊的键值叫做主键,它用于惟一地标识表中的某一条记录.也就是说,一个表不能有多个主键,并且主键不能为空值. 无论是MongoDB还是MySQL,都存在着主键的定义. 对于M ...

  8. plsql programming 07 使用数据

    数据类型 char, Nchar varchar2, Nvarchar2 clob, Nclob number number(9, 2);  -- 定点小数, 小数点左边7位, 右边2位 number ...

  9. 通过Get方式传递数据

    1:因为get传参数有个特点就是不能超过256字节.如果数据大的话会溢出. 解决办法: $data=json_encode($data_array); 然后在拼接超链接: <a href=&qu ...

  10. Package java.sql

    Provides the API for accessing and processing data stored in a data source (usually a relational dat ...