c#中Hashtable方法返回值的探索

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

namespace ConApp
{
    class Student
    {
        string name;

        public string Name
        {
            get { return name; }
            set { name = value; }
        }
        ulong stuID;

        public ulong StuID
        {
            get { return stuID; }
            set { stuID = value; }
        }

        double chinese;

        public double Chinese
        {
            get { return chinese; }
            set { chinese = value; }
        }
        double math;

        public double Math
        {
            get { return math; }
            set { math = value; }
        }
        double english;

        public double English
        {
            get { return english; }
            set { english = value; }
        }

        public double ComputeAvg()
        {
            return (english + math + chinese) / 3;
        }

    }

    class Program
    {
        static void Main(string[] args)
        {
            Student stu = new Student();
            stu.Name = "wang";
            stu.StuID = 123;

            Hashtable ht = new Hashtable();
            ht.Add(stu.StuID,stu);
            Student stutemp;
            foreach (DictionaryEntry de in ht)
            {
                stutemp = (Student)ht[de.Key];
                Console.WriteLine("学生姓名:{0}\n学生学号:{1}\n", stutemp.Name, stutemp.StuID);
            }
            stu.Name = "张";
            stu.StuID = 456;
            Student temp;
            foreach (DictionaryEntry de in ht)
            {
                temp = (Student)ht[de.Key];
                Console.WriteLine("学生姓名:{0}\n学生学号:{1}\n", temp.Name, temp.StuID);
            }
            ulong id = 123;
            temp = (Student)ht[id];
            temp.Name = "song";
            temp.StuID = 999;
            foreach (DictionaryEntry de in ht)
            {
                stutemp = (Student)ht[de.Key];
                Console.WriteLine("学生姓名:{0}\n学生学号:{1}\n", stutemp.Name, stutemp.StuID);
            }
            Student newStu = new Student();
            newStu = (Student)ht[id];
            newStu.Name = "uuuu";
            newStu.StuID = 1000;
            foreach (DictionaryEntry de in ht)
            {
                stutemp = (Student)ht[de.Key];
                Console.WriteLine("学生姓名:{0}\n学生学号:{1}\n", stutemp.Name, stutemp.StuID);
            }
        }
    }
}

可以发现,对接收对象的成员改变,原对象的成员也改变。
可以猜想 哈希表内存放的是“引用” 也就是我们c语言中所说的指针。

而(Student)ht[id]返回值也是引用。

时间: 2024-09-29 02:08:16

c#中Hashtable方法返回值的探索的相关文章

Shell中处理方法返回值问题

同步发表:http://blog.hacktons.cn/2017/12/13/shell-func-return/ 背景 通过shell编程,写一些工具批处理的时候,经常需要自定义函数.更复杂点的情况下,可能有需要返回一个值. 由于在shell的世界中,并不像其他编程语言,它不支持我们所熟悉的方法返回.本文一起总结一下如何优雅的解决返回值问题? 测试程序 我们一般通过$?来获取上一个语句的输出.看一下下面得测试语句: 新建testReturn脚本 returnString(){ return

Spring MVC中 controller方法返回值

1.返回ModelAndView 定义ModelAndView对象并返回,对象中可添加model数据.指定view 2.返回String 1.表示返回逻辑视图名 model对象通过 model.addAttribute("xxx",model)进行设定 2.redirect重定向: redirect重定向特点:浏览器地址栏中的url会变化.修改提交的request数据无法传到重定向的地址.因为重定向后重新进行request(request无法共享) 3.forward页面转发: 通过f

struts2在配置文件中调用Action的方法返回值

struts2在配置文件中可以调用Action的方法返回值 1.Action中 //文件下载名 public String getDownloadFileName(){ String downloadFileName = ""; String filename = fileName + ".xls"; try { downloadFileName = URLEncoder.encode(filename,"UTF-8"); } catch (Un

060、Java中定义有返回值有参数的方法

01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public static void main(String[] args) { int result = add(10, 20); // 方法的返回值可以进行接收 System.out.println("计算结果:" + result); System.out.println("计算结果:

SpringMVC中通过@ResponseBody返回对象,Js中调用@ResponseBody返回值,统计剩余评论字数的js,@RequestParam默认值,@PathVariable的用法

1.SpringMVC中通过@ResponseBody返回对象,作为JQuery中的ajax返回值 package com.kuman.cartoon.controller; import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.apache.commons.io.filefilter.FalseFileFilter; import org.slf4j.Logger; import org.s

使用Result代替ResultSet作为方法返回值

在开发过程中,我们不能将ResultSet对象作为方法的返回值,因为Connection连接一旦关闭,在此连接上的会话和在会话上的结果集也将会自动关闭,而Result对象则不会发生这种现象,所以在查询时尽量以Result对象作为方法返回值. import javax.servlet.jsp.jstl.sql.Result; import javax.servlet.jsp.jstl.sql.ResultSupport; ResultSet rs = executeQuery(sql, param

Spring MVC学习之三:处理方法返回值的可选类型

转自:http://www.cnblogs.com/cuizhf/p/3810652.html ———————————————————————————————————————————————————————————— spring mvc处理方法支持如下的返回方式:ModelAndView, Model, ModelMap, Map,View, String, void.下面将对具体的一一进行说明: ModelAndView @RequestMapping("/show1") publ

方法返回值 前面的<T>是什么?

如: public <T> ValueOperations<String,T> setCacheObject(String key,T value){                return null;            } 这个的T的声明,跟类后面的<T>没有关系.方法前面的<T>可以理解为是:给这个方法指定泛型,可以是自己独有的某个类都可以执行这个方法. 下边是找到的一个非常好的帖子: import java.util.*; class Frui

黑马程序员——关于java字节流的read()方法返回值为int的思考(转载)

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! -------  之前一直不明白java字节流的read()方法返回值为什么为int,今天在网上找到了答案.以下为转载,原文地址:http://blog.sina.com.cn/s/blog_9e351f9b01015kgp.html 我们都知道java中io操作分为字节流和字符流,对于字节流,顾名思义是按字节的方式读取数据,所以我们常用字节流来读取二进制流(如图片,音乐 等文件).问题是为什么字节流中定义的