惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - Franky
N
Netflix TechBlog - Medium
宝玉的分享
宝玉的分享
Google DeepMind News
Google DeepMind News
腾讯CDC
G
Google Developers Blog
Martin Fowler
Martin Fowler
Microsoft Security Blog
Microsoft Security Blog
Recent Announcements
Recent Announcements
爱范儿
爱范儿
Engineering at Meta
Engineering at Meta
Microsoft Azure Blog
Microsoft Azure Blog
A
About on SuperTechFans
aimingoo的专栏
aimingoo的专栏
有赞技术团队
有赞技术团队
Jina AI
Jina AI
人人都是产品经理
人人都是产品经理
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
M
MIT News - Artificial intelligence
罗磊的独立博客
博客园 - 三生石上(FineUI控件)
美团技术团队
WordPress大学
WordPress大学
阮一峰的网络日志
阮一峰的网络日志

博客园 - 8user

partial关键字的含义和使用 JS仿Open()打开一个新窗口,并不是弹出新窗口 判断是否含有汉字 - 8user - 博客园 如何统计代码行执行的时间? - 8user - 博客园 时间的正则表达式验证 深入探讨IsPostBack【转】 IIS无法启动的解决方法 FCKEditor的使用及配置方法 Cool MVC: 使用正则式限定路由规则Rount - 8user C#在线备份数据库至制定目录 - 8user - 博客园 c#实现天气预报查询 C#中的枚举器 C#里面比较时间大小三种方法 - 8user - 博客园 c#中删除ArrayList中的重复数据 - 8user - 博客园 SQL Server数据库开发的二十一条规则 c#实现程序的开机启动 - 8user - 博客园 VS2008 快捷键大全 C#调用dos命令 反射性能测试
C#中的值类型和引用类型
8user · 2009-06-10 · via 博客园 - 8user

1、常量:访问修饰符 const 数据类型 常量名=值

     使用场合:A、用于在程序中一旦设定就不允许被修改的值

                   B、用于在程序中被经常引用的值

2、枚举:表示一组有限的值,对可能的值进行约束。为了防止用户乱输入,规范用户的输入。

     2.1、给枚举成员赋值只能赋整型,不能赋字符串。

     2.2、转换:A、枚举转换为整型 如int genderNum=(int)stu.Gender

                     B、枚举转换为字符串 如Console.WriteLine("您输入的性别是{0}",stu.Gender.ToString())

                     C、从一个字符串中获取枚举的值

                          如stu.Gender=(Genders)(Enum.Pase(typeof(Genders),"Female"))

示例:


using System;
using System.Collections.Generic;
using System.Text;

namespace MySchool
{
    
public enum Genders
    
{
        Male 
= 0, Female = 1
    }


    
class Student
    
{
        
private Genders gender;
        
public Genders Gender
        
{
            
get return gender; }
            
set { gender = value; }
        }

    }

}



using System;
using System.Collections.Generic;
using System.Text;

namespace MySchool
{
    
class Program
    
{
        
static void Main(string[] args)
        
{
            Student stu 
= new Student();
            stu.Gender 
= Genders.Male;

            
int genderNum = (int)stu.Gender;

            
switch (genderNum)
            
{
                
case 0:
                    Console.WriteLine(
"您输入的是性别是-男");
                    
break;
                
case 1:
                    Console.WriteLine(
"您输入的是性别是-女");
                    
break;
            }

            Console.WriteLine(
"您输入的是性别是{0}", stu.Gender.ToString());

            stu.Gender = (Genders)(Enum.Parse(typeof(Genders), "Female"));
            Console.WriteLine(
"您输入的是性别是{0}", stu.Gender.ToString());
        }

    }

}

注意:在枚举的主体中,是不可以定义属性和方法

         枚举与类是同一级别的,因此要单独新建

3、结构:访问修饰符 struct 结构名

             {

                  定义结构成员

              }

     类与结构的区别:            类                                       结构

                                  引用类型                                   值类型

                                 可以被继承                                不能被继承

                                可以有默认构造函数                    不可以有默认构造函数

                               可以添加无参的构造函数              可以添加构造函数,但它们必须带参数

                               可以有实例字段初始值                  不能有实例字段初始值

     使用场合:结构用于组织一堆数据。

                   1.该类型的主要职责是否用于数据存储?

                   2.该类型的公有接口是否都是一些存取属性?

                   3.是否确信该类型永远不可能有子类?

                   4.是否确信该类型永远不可能具有多态行为?

4、值类型和引用类型的区别:主要是在内存中的存储方式不同造成的。

     值类型将一个值类型变量赋给另一个值类型变量时,将复制包含的值(替身)。

     引用类型变量的赋值只复制对象的引用,而不复制对象的本身。

     两者的转换:示例


using System;
using System.Collections.Generic;
using System.Text;

namespace Boxing
{
    
class Boxing
    
{
        
static void Main(string[] args)
        
{
            
int i = 123;
            
object o = i; // 装箱
            i = 456;  //改变i的内容
            System.Console.WriteLine("值类型的值为 {0}", i);
            System.Console.WriteLine(
"引用类型的值为 {0}", o);
        }


        
//static void Main(string[] args)
        
//{
        
//    int i = 123;
        
//    object o = i;  // 隐装箱
        
//    try
        
//    {
        
//        int j = (int)o;  // 拆箱
        
//        System.Console.WriteLine("取消装箱成功.");
        
//    }
        
//    catch (System.InvalidCastException e)
        
//    {
        
//        System.Console.WriteLine("{0} 错误: 不正确的取消装箱.", e.Message);
        
//    }
        
//}
    }

}

引用类型:类(基类:System.Object/字符串:string,但是表现为值类型的特征/自定义类:class)

              接口:interface  

              数组 

值类型:主要包括基本的数据类型、结构类型、枚举类型等

5、在类中使用索引器:示例


using System;
using System.Collections.Generic;
using System.Text;

namespace MySchool
{
    
class Students
    
{
        
private Student[] students = new Student[3];
        
public Students()
        
{
            students[
0= new Student("Scofield", Genders.Male, 28"越狱狱");
            students[
1= new Student("张靓靓", Genders.Female, 20"唱歌歌");
            students[
2= new Student("周杰杰", Genders.Male, 21"耍双节棍棍");
        }


        
//基本索引器 根据数组下标查找学员
        public Student this[int index]
        
{
            
get return students[index]; }
        }


        
//与 Java 中的 getter 方法类比 证明方法可以返回一个类型
        
//public Student GetStudent(int index)
        
//{
        
//    return students[index]; 
        
//}

        
//重载的索引器 根据姓名查找学员
        public Student this[string name]
        
{
            
get 
            
{
                
int i;
                
bool found = false;
                
for (i = 0; i < students.Length; i++)
                
{
                    
if (students[i].Name == name)
                    
{
                        found 
= true;
                        
break;
                    }

                }


                
if (found)
                
{
                    
return students[i]; 
                }

                
else
                
{
                    
return null;
                }

            }

        }


        }

    }