加入收藏
举报
02-05 22:17
#0
文件名称:
作业4.md
所在目录:
Csharp程序设计_2024 / 作业
文件大小:
2.34 KB
下载地址:
chen2438/zstu-study
   
免责声明:本网站仅提供指向 GitHub 上的文件的链接,所有文件的版权归原作者所有,本网站不对文件内容的合法性、准确性或安全性承担任何责任。
文本预览:
---
created: 2024-06-14T18:43:47 (UTC +08:00)
tags: []
source: https://mooc1.chaoxing.com/mooc-ans/mooc2/work/view?courseId=206698159&classId=93333441&cpi=264745337&workId=33744044&answerId=52580920&enc=5cf082978f27e68ded5324105906df46
author:
---
# 作业详情
> ## Excerpt
> 以下代码模拟一个服务类,Server类实现了服务器的创建逻辑,子类只要在生成实例对象时传递一个端口号即可创建一个监听该端口的服务,该代码意图如下:
---
### 1\. (简答题, 20分)如何令一个数据类型的实例不可变(像string一样)?
### 2\. (简答题, 20分)在类里,利用get/set方法,或利用属性,都可以达到信息隐藏的效果。这两种方法有哪些差别,哪种方法功能更强?
### 3\. (简答题, 35分)
以下代码模拟一个服务类,Server类实现了服务器的创建逻辑,子类只要在生成实例对象时传递一个端口号即可创建一个监听该端口的服务,该代码意图如下:
(1)通过SimpleServer的构造函数接收端口参数。
(2)子类的构造函数默认调用父类的构造函数。
(3)父类的构造函数调用子类的getPort方法获得端口号。
(4)父类构造函数建立端口监听机制(以Console.WriteLine替代)。
(5)对象创建完毕,服务监听启动,正常运行。
运行该程序,多运行几次,查看输出结果,**写出你认为的code 1 – 5的执行顺序,并解释原因**。
    class Test
    {
        public int i = 0;
        static void Main(string\[\] args)
        {
            Server s = new SimpleServer(1000);
        }
    }
    abstract class Server
    {
        protected const int DEFAULT\_PORT = 40000;//code1
        public Server()
        {
            int port = getPort();//code2
            Console.WriteLine("Port: " + port);
        }
        protected abstract int getPort();
    }
    class SimpleServer : Server
    {
        private int port = 100;//code3
        public SimpleServer(int \_port)
        {
            port = \_port;//code4
        }
        protected override int getPort()
        {
            return (new Random()).NextDouble() > 0.5 ? port : DEFAULT\_PORT;//code5
        }
    }
点赞 回复
回帖
支持markdown部分语法 ?