精华内容
下载资源
问答
  • C#多线程编程 http://www.cnblogs.com/luxiaoxun/p/3280146.html DLL 编写,导出函数 http://blog.csdn.net/hanyujianke/article/details/8622041/***********************... 反射获取对象属性信息 Type T = o

    C#多线程编程
    http://www.cnblogs.com/luxiaoxun/p/3280146.html
    DLL 的编写,导出函数
    http://blog.csdn.net/hanyujianke/article/details/8622041

    /********************************************/
    反射获取对象的属性信息
    Type T = obj.GetType();//其中obj为一个类的对象
    PropertyInfo[] infos = T.GetProperyies();//info里面保存了obj对象的各个属性信息
    foreach(PropertyInfo info in infos)//info里面是某一个属性
    {
    //获取该属性具有的特性,Atts实际上是一个特性数组,里面包含了该属性的所有特性
    var Atts = propertyInfo.GetCustomAttributes(true);
    //获取特性的类型
    Type AttType =Atts [i].GetType();//或者获取它的名字 Atts [index].GetType().Name
    //Atts [i]是一个object类型,需要强制类型转换才能,如:
    XmlAttribute xAtt = (XmlAttribute)Atts [i]
    //然后就可以获取该属性的该特性中的值了
    string eleName = xAtt.ElementName;
    /*******获取属性的值**************/
    object propertyValue = propertyInfo.GetValue(obj, null);//你得知道它是什么类型,再强制类型转换

    }

    展开全文
  • 基本信息在ERP软件的特性和功能 在这篇文章中关于ERP软件,包括功能和ERP软件功能的基本信息说明。这些应该实施或选择任何ERP软件之前,请仔细阅读。 ERP(企业资源规划)软件是企业管理软件的应用,使组织能够应用的...
    基本信息在ERP软件的特性和功能   在这篇文章中关于ERP软件,包括功能和ERP软件功能的基本信息说明。这些应该实施或选择任何ERP软件之前,请仔细阅读。   ERP(企业资源规划)软件是企业管理软件的应用,使组织能够应用的综合应用系统来处理业务。 ERP软件集成的操作,如规划,制造,营销,配送,销售,库存管理,财务,会计,人力资源,及其他营业单位的每一个部分。   通常情况下,一个组织要实现ERP软件来调整业务目标,以最新的技术解决方案,以改善利益相关者的承诺和客户的信任,对组织的资产和资源的最佳利用。通常情况下,一个组织正在寻求优秀的ERP软件,推进特性和功能。
       企业资源规划软件可以在不同的网络和硬件配置,并使用一个数据库表中数据的正确存储。通常情况下,这个数据库是所有ERP软件支持的应用普遍。有ERP软件,其中包括仪表板或管理门户,搜索功能,交易数据库,文档管理工具,商业智能系统,工作流管理工具,聊天或邮件功能,报表定制工具,是能够访问外部系统工具的不同组件等。   ERP软件的特点是非常有益的每一个组织。其中的企业资源规划软件ERP软件的基本功能是,它可以促进应收账款和结算客户适当控制。在整个过程中,也可以自动进行。该ERP软件可以很容易地沉迷整个组织的需求为整个组织被视为由企业资源规划软件为一体。这些软件确保各部门组织之间的相关性,准确,及时的信息流。
     ERP软件的另一个特点是,这些软件使用被更新,并且基于实时信息的数据。对于例如,如果一个客户有关于公司的特定产品,并在产品的说明文件有任何疑问最近已经改变了,在ERP软件将确保篡改过的文件将被用于回答客户的查询。   今天高度发达的ERP软件一般都能够满足组织的法律规定也需要。还有一些其他的功能和ERP软件的功能还包括创建主数据,交易项目,不同的交易明细,数据管理,安全性,报告,商业智能之间的连接,电子邮件,回滚功能,实时验证,网络使等   由于我们提供有关ERP软件,关于实施企业资源规划软件信息的基本信息也将这篇文章的一部分。
     ERP软件的实施是不是每个人都那么容易。如果现有的业务,实施ERP软件后可能需要进行一些改变业务流程。这些变化在经营过程中经常做出这样的流程改造。重要的是要知道每个进程的值与现有的自动化系统可实施ERP软件之前,使得业务的功能性可以被优化。 ERP软件通常带来许多参数,可导致变化的系统操作。关于ERP软件,以及功能和ERP软件的功能上面给出的基本信息将是非常有益的你。
    
    展开全文
  • 反射和特性(2.反射特性信息

    千次阅读 2016-12-30 15:56:44
    1.什么是特性特性是一个对象,它可以加载到程序集及程序集对象中,这些对象包括 程序集本身、模块、类、接口、结构、构造函数、方法、方法参数等,加载了特性的对象称作特性的目标。特性是为程序添加元数据(描述...

    1.什么是特性

    特性是一个对象,它可以加载到程序集及程序集的对象中,这些对象包括 程序集本身、模块、类、接口、结构、构造函数、方法、方法参数等,加载了特性的对象称作特性的目标。特性是为程序添加元数据(描述数据的数据)的一种机制,通过它可以给编译器提供指示或者提供对数据的说明。

    2.使用FCL内置特性

    这是一个发送短信的示例,我们将短信需要的参数以方法参数的形式一个个代入方法。后期参数越来越多显然是使方法扩展性变得很糟糕。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    namespace SimpleExplore
    {
        class Program
        {
            static void Main(string[] args)
            {
                TestClass t = new TestClass();
                t.SendMsg("测试标题", "测试内容");
            }
        }
        public class TestClass
        {
            public void SendMsg(string title,string content)
            {
                Console.WriteLine("短信标题:{0}\n内容:{1}",title,content);
            }
        }
    }
    

    那么我们需要把参数封装成一个类作为参数传递给发送短信的方法

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    namespace SimpleExplore
    {
        class Program
        {
            static void Main(string[] args)
            {
                TestClass t = new TestClass();
                t.SendMsg(new Message() { title = "测试标题", content = "测试内容" });
            }
        }
        public class Message
        {
            public string title { get; set; }
            public string content { get; set; }
        }
        public class TestClass
        {
            public void SendMsg(Message msg)
            {
                Console.WriteLine("短信标题:{0}\n内容:{1}", msg.title, msg.content);
            }
            public void SendMsg(string title,string content)
            {
                Console.WriteLine("短信标题:{0}\n内容:{1}",title,content);
            }
        }
    }
    

    我们不能删除以前的SendMsg,否则会导致正在使用以前发送短信版本客户端程序出错,但是我们又想告知客户端程序员希望他们使用新版本的SendMsg怎么办呢??肯定不是电话或发邮件告知。接下来就使用特性来完成这件事,只要客户端使用旧版本,编译代码后由编译器告知

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    namespace SimpleExplore
    {
        class Program
        {
            static void Main(string[] args)
            {
                TestClass t = new TestClass();
                t.SendMsg("测试标题", "测试内容");
            }
        }
        public class Message
        {
            public string title { get; set; }
            public string content { get; set; }
        }
        public class TestClass
        {
            public void SendMsg(Message msg)
            {
                Console.WriteLine("短信标题:{0}\n内容:{1}", msg.title, msg.content);
            }
            [Obsolete("当前版本的发送短信不在进行维护,请使用新版SendMsg(Message msg)重载方法")]
            public void SendMsg(string title,string content)
            {
                Console.WriteLine("短信标题:{0}\n内容:{1}",title,content);
            }
        }
    }
    

    这里写图片描述

    输出窗口也可以看到编译警告,通过视图 》输出可以调出输出窗口

    3.自定义特性

    假设我们有这样一个很常见的需求:我们在创建或者更新一个类文件时,需要说明这个类是什么时候、由谁创建的,在以后的更新中还要说明在什么时候由谁更新的,可以记录也可以不记录更新的内容,以往你会怎么做呢?是不是像这样在类的上面给类添加注释:

    //更新:Matthew, 2008-2-10, 修改 ToString()方法
    //更新:Jimmy, 2008-1-18
    //创建:张子阳, 2008-1-15
    public class DemoClass{
        // Class Body
    }

    这样的的确确是可以记录下来,但是如果有一天我们想将这些记录保存到数据库中作以备份呢?你是不是要一个一个地去查看源文件,找出这些注释,再一条条插入数据库中呢?

    通过上面特性的定义,我们知道特性可以用于给类型添加元数据,这些元数据可以用于描述类型。那么在此处,特性应该会派上用场。那么在本例中,元数据应该是:注释类型(“更新”或者“创建”),修改人,日期,备注信息(可有可无)。而特性的目标类型是DemoClass类。

    按照对于附加到DemoClass类上的元数据的理解,我们先创建一个封装了元数据的类RecordAttribute:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    namespace SimpleExplore
    {
        class Program
        {
            static void Main(string[] args)
            {
    
            }
        }
        public class RecordAttribute : Attribute
        {
            private string _recordType;//记录类型的定义:创建/更新
            private DateTime _date;//创建/更新 时间
            private string _author;//作者
            public string Remark { get; set; }//备注,命名参数,有get和set
    
            /// <summary>
            /// 档案记录,用于记录代码创建和更新的信息
            /// </summary>
            /// <param name="recordType">记录类型的定义:创建/更新</param>
            /// <param name="author">作者</param>
            /// <param name="date">创建/更新时间</param>
            public RecordAttribute(string recordType,string author,string date)
            {
                this._recordType = recordType;
                this._author = author;
                this._date = Convert.ToDateTime(date);
            }
            //对于位置参数只提供get
            public string RecordType { get { return _recordType; } }
            public DateTime Date { get { return _date; } }
            public string Author { get { return _author; } }
        }
    
    }
    

    注意构造函数的参数 date,必须为一个常量、Type类型、或者是常量数组,所以不能直接传递DateTime类型。否则:
    这里写图片描述

    3.1 使用自定义特性

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    namespace SimpleExplore
    {
        class Program
        {
            static void Main(string[] args)
            {
                TestClass t = new TestClass();
                Console.WriteLine(t.ToString());
            }
        }
        [Record("创建","张三","2016-12-30",Remark="这是第一次创建")]
        [Record("编辑", "李四", "2016-12-31", Remark = "新增了SendMsg方法")]
        public class TestClass
        {
            public override string ToString()
            {
                return "测试类";
            }
            public void SendMsg()
            {
                Console.WriteLine("SnedMsg");
            }
        }
    
        public class RecordAttribute : Attribute
        {
            private string _recordType;//记录类型的定义:创建/更新
            private DateTime _date;//创建/更新 时间
            private string _author;//作者
            public string Remark { get; set; }//备注,命名参数,有get和set
    
            /// <summary>
            /// 档案记录,用于记录代码创建和更新的信息
            /// </summary>
            /// <param name="recordType">记录类型的定义:创建/更新</param>
            /// <param name="author">作者</param>
            /// <param name="date">创建/更新时间</param>
            public RecordAttribute(string recordType,string author,string date)
            {
                this._recordType = recordType;
                this._author = author;
                this._date = Convert.ToDateTime(date);
            }
            //对于位置参数只提供get
            public string RecordType { get { return _recordType; } }
            public DateTime Date { get { return _date; } }
            public string Author { get { return _author; } }
        }
    
    }
    

    编译之后会出错,使用了重复的Record,问题是我们确实需要重复,代码在不断维护,记录也会随之重复增加。怎么办呢?
    我们观察系统内置特性Obsolete的定义,发现特性也有特性,这样的特性被称为 元元数据(meta-metadata),如:AttributeUsageAttribute

    3.2 AttributeUsageAttribute

    AttributeUsageAttribute有三个参数:

    ValidOn:获取一组值,这组值标识指示的属性可应用到的程序元素。

    AllowMultiple:获取或设置一个布尔值,该值指示能否为一个程序元素指定多个指示属性实例。

    Inherited:获取或设置一个布尔值,该值指示指示的属性能否由派生类和重写成员继承。

    Inherited设置为false,因为我不需要特性被子类继承,子类和父类不一定在同一时间修改,如这次更新版本只改了父类TestClass,并没有修改它的子类。

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    namespace SimpleExplore
    {
        class Program
        {
            static void Main(string[] args)
            {
                TestClass t = new TestClass();
                Console.WriteLine(t.ToString());
            }
        }
        [Record("创建","张三","2016-12-30",Remark="这是第一次创建")]
        [Record("编辑", "李四", "2016-12-31", Remark = "新增了SendMsg方法")]
        public class TestClass
        {
            public override string ToString()
            {
                return "测试类";
            }
            public void SendMsg()
            {
                Console.WriteLine("SnedMsg");
            }
        }
        [AttributeUsage(AttributeTargets.Class|AttributeTargets.Method,AllowMultiple=true,Inherited=false)]
        public class RecordAttribute : Attribute
        {
            private string _recordType;//记录类型的定义:创建/更新
            private DateTime _date;//创建/更新 时间
            private string _author;//作者
            public string Remark { get; set; }//备注,命名参数,有get和set
    
            /// <summary>
            /// 档案记录,用于记录代码创建和更新的信息
            /// </summary>
            /// <param name="recordType">记录类型的定义:创建/更新</param>
            /// <param name="author">作者</param>
            /// <param name="date">创建/更新时间</param>
            public RecordAttribute(string recordType,string author,string date)
            {
                this._recordType = recordType;
                this._author = author;
                this._date = Convert.ToDateTime(date);
            }
            //对于位置参数只提供get
            public string RecordType { get { return _recordType; } }
            public DateTime Date { get { return _date; } }
            public string Author { get { return _author; } }
        }
    
    }
    

    4.通过反射获得特性信息

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    namespace SimpleExplore
    {
        class Program
        {
            static void Main(string[] args)
            {
                Type t = typeof(TestClass);
    
                Console.WriteLine("下面列出应用于 TestClass 的RecordAttribute属性:", t.ToString());
    
                foreach (RecordAttribute item in t.GetCustomAttributes(typeof(RecordAttribute), false))
                {
                    Console.WriteLine(item.ToString());
                    Console.WriteLine("      类型:{0}", item.RecordType);
                    Console.WriteLine("      作者:{0}", item.Author);
                    Console.WriteLine("      日期:{0}", item.Date.ToString("yyyy-MM-dd"));
                    if (!String.IsNullOrEmpty(item.Remark))
                    {
                        Console.WriteLine("      备注:{0}", item.Remark);
                    }
                } 
            }
        }
        [Record("创建","张三","2016-12-30",Remark="这是第一次创建")]
        [Record("编辑", "李四", "2016-12-31", Remark = "新增了SendMsg方法")]
        public class TestClass
        {
            public override string ToString()
            {
                return "测试类";
            }
            public void SendMsg()
            {
                Console.WriteLine("SnedMsg");
            }
        }
        [AttributeUsage(AttributeTargets.Class|AttributeTargets.Method,AllowMultiple=true,Inherited=false)]
        public class RecordAttribute : Attribute
        {
            private string _recordType;//记录类型的定义:创建/更新
            private DateTime _date;//创建/更新 时间
            private string _author;//作者
            public string Remark { get; set; }//备注,命名参数,有get和set
    
            /// <summary>
            /// 档案记录,用于记录代码创建和更新的信息
            /// </summary>
            /// <param name="recordType">记录类型的定义:创建/更新</param>
            /// <param name="author">作者</param>
            /// <param name="date">创建/更新时间</param>
            public RecordAttribute(string recordType,string author,string date)
            {
                this._recordType = recordType;
                this._author = author;
                this._date = Convert.ToDateTime(date);
            }
            //对于位置参数只提供get
            public string RecordType { get { return _recordType; } }
            public DateTime Date { get { return _date; } }
            public string Author { get { return _author; } }
        }
    
    }
    

    这里写图片描述

    展开全文
  • 近期做了一个工厂在线生产信息采集项目,总结一下整个项目过程,同时谈谈JAVA夸平台特性的优势。项目简述: 建立一个数据库服务器,用多种终端(包括网页终端,PC终端,PDA终端 [Android终端] )实现对数据库查找...

    近期做了一个工厂在线生产信息采集项目,总结一下整个项目过程,同时谈谈JAVA夸平台特性的优势。

    项目简述:   建立一个数据库服务器,用多种终端(包括网页终端,PC终端,PDA终端  [Android终端]  )实现对数据库的查找,增加,修改。

    项目编程语言:JAVA,它同时可以写Android,PC软件,查询网页,一码多用。

    项目编辑器采用:intellij IDEA,具体安装和环境搭建,可以参考我的另外一篇博客:

    http://www.cnblogs.com/JewinH/p/7717677.html(里面包含如何用JAVA制作一个链接数据库的web的DEMO)

     

    简单描述3个终端的编写方式:

    网页终端:Tomcat搭建服务器,JAVA+HTML5+CSS,做出一个简单的查询界面。

    PC终端:界面用SWING做的,用exe4j打包成.EXE文件,加上JRE运行包,可以在任意操作系统中运行。

    Android终端:这里用的是Android Studio开发平台,前端是xml文件写的,后台用java,两者相互分离,通过组件id互相认识。

     

    下面讲几点JAVA夸平台特性的优势:

    1.开发包可以重用:

      例如项目中用到MYSQL数据的包,用到SQLserver的包,用到ZXING的包,配置这些包的过程是一样的。

    2.后台的代码可以重用:

      不同终端的前端设计有所区别,但其后台是一致的,只要修改一小部分代码就可以用到其他终端。

    3.PC终端不会出现不同系统不兼容的问题:

      例如公司用各种操作系统的人都有,之前用python开发过一个PC终端,使用时发现有些机器缺少DLL文件无法运行,xp系统直接没有支持的库无法使用。用JAVA做出来以后,配上其自带的JRE就可以解决这种系统不同导致的问题。

     

     

    总结:

    1. 如果要开发一个需要在多种平台下运行的软件,JAVA将是一个不错的选择,他可以大大节省你的时间。

    2. 当想做一个产品时,想清楚应用场景,选择合适的开发语言会节省较多时间。

    3. 各种编程语音都是类似的,不需要担心某种语音你不懂,最重要是看这款语言有没有支持你项目的成形API。

    4. 做项目之前先做一个demo,测试一下功能是不是OK的,确定了这个,再去想怎么把整个项目更好的完成。

    展开全文
  • 面向对象的特性

    2021-02-19 21:06:03
    面向对象有哪些方面的特性: 1,抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。 2,继承:继承是从已有...
  • Java语言三大特性即是:封装、继承、多态封装:首先,属性可用来描述同一类事物特征,方法可描述一类事物可做操作。封装就是把属于同一类事物共性(包括属性与方法)归到一个类中,以方便使用。1.概念:封装也...
  • 鲜为人知相位噪声特性 美国模拟器件公司 Paul Smith 相位噪声涵盖范围很广,包括相位噪声特性 、相位噪声测量... 关于相位噪声专题的信息有很多,包括相位噪声特性 、相位噪声测量方法 以及它对系统性能影响。众所
  • Java语言三大特性即是:封装、继承、多态封装:首先,属性可用来描述同一类事物特征,方法可描述一类事物可做操作。封装就是把属于同一类事物共性(包括属性与方法)归到一个类中,以方便使用。1.概念:封装也...
  • 表单method特性

    2016-10-21 20:31:10
    浏览器对表单信息进行编码,并将编码数据发送到服务器,有两种方法:POST和GET,可以用form元素...只有服务器才能看到请求的内容,因此,POST是发送保护信息的最好方法,而且POST无字符长度限制的问题。设置为GET时,编
  • java三大特性的理解封装:首先,属性可用来描述同一类事物特征,方法可描述一类事物可做操作。封装就是把属于同一类事物共性(包括属性与方法)归到一个类中,以方便使用。1.概念:封装也称为信息隐藏,是指利用...
  • 在该面板中,瞬态测量特性的选项卡中,可以对测量极性和边沿数进行调节,也可以对测量结果中若干特性参数进行实时数值显示,包括持续期、前冲、过冲、爬升率等输出结果。在测量结果波形图显示上,可以看到3条...
  • 人类所有有目的的活动总是身体操作与心理认知过程的结合,这种心理认知过程包括信息的处理、记忆和学习、决策和计划等。在认知任务中,若对人的要求与人所进行的脑力作业与技能作业的特征、方法及基本规律不相适应,则...
  • 要获取这些信息,应该在已知条件下准确测试电池各种特性。本应用笔记叙述了获取电池特性的步骤,包括如何采集数据以及如何处理数据。文章还同时阐述了如何借助电量计软件算法,将数据载入Dallas Semiconductor...
  • 讨论了Java语言安全特性,指出applet "沙盒",是Java语言安全特性的核心,它有效地阻止了病毒传染、信息窃取等非法操作。Java安全模型是一种“三叉”结构,包括:类加载器、类校验器和安全管理器。
  • 国巨电容的特性 1、先进的薄层化技术,使产品小型化,大容量。 2、独石结构,确保产品的机械强度及可靠性。 3、高尺寸精度,保证元件安装的高效率。 4、容量低漂移,可用于各种形势的采杨电路。 5、低残留电感...
  • 防火墙功能特性

    千次阅读 2019-01-09 16:52:19
    访问控制功能 防火墙主要功能是策略(policy)和...①对于需要转发报文,防火墙先获取报文头信息包括IP层所承载上层协议协议号、报文源IP地址、目的IP地址、源端口号和目的端口号(即五元组)。 ②将...
  • 1:“面向对象的特性有哪些?” 2:“封装、多态、继承”: 1:“还有呢?” 2:“?” 1:“....” 面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: - 抽象:抽象是将一类对象的共同特征总结...
  • 操作系统基本特性

    千次阅读 2017-09-08 10:24:02
    操作系统基本特性包括–并发,共享,虚拟,异步 1.并发 1.并行与并发 并行性是指两个或多个事件在同一时刻发生。 并发性是指两个或多个事件在同一时间间隔内发生。 2.引入进程 进程是指在系统中能独立运行并...
  • Java四个基本特性

    2020-09-19 16:45:43
    2. 继承:继承是从已有类抽取继承信息并构建新的类的过程,提供继承信息的被称为父类(超类/基类),获取继承信息的被称为子类(派生类)。继承它让变化中的软件系统有了一定的延续性,同时继承也是封装过程中可变因素的...
  • 窗体特性 1. 记住表格布局 2. Inquiry 查询 3. 控件 4. 多国语言 5 Clone 复制 ...6 Export/Import 通用导入导出 ...当窗体包含Grid,TreeView控件时,窗体在保存时会记住...Grid设置包括,列顺序,分组,显示字...
  • Java三大特性

    2017-12-12 11:54:52
    Java语言三大特性即是:封装、继承、多态 封装: 首先,属性可用来描述同一类事物特征,方法可描述一类事物可做操作。封装就是把属于同一类事物共性(包括属性与方法)归到一个类中,以方便使用。 1....
  •  传感器是一种检测装置,能感受到被测量的信息,并能将感受到的信息,按一定规律变换成为电信号或其他所需形式的信息输出,以满足信息的传输、处理、存储、显示、记录和控制等要求。它是实现自动检测和自动控制的...
  • 继续扩大在低功耗解决方案上领先优势,Altera... Cyclone III LS FPGA安全特性包括全面的信息安全保障设计包,支持防篡改、设计安全和设计分离功能。为保护非常敏感的信息,Cyclone III LS FPGA防篡改特性包括
  • java三大特性

    2016-08-30 19:10:19
    Java语言三大特性即是:封装、继承、多态 封装: 首先,属性可用来描述同一类事物特征,方法可描述一类事物可做操作。封装就是把属于同一类事物共性(包括属性与方法)归到一个类中,以方便使用。 1....
  • Java类三大特性总结

    万次阅读 多人点赞 2018-07-31 20:47:13
    三大特性包括:封装、继承、多态 一、 封装 1.含义:封装就是把同一类事物共性(包括属性和方法)归到同一类中,方便使用。 封装和继承几乎都是为多态而准备。 封装也称信息隐藏,是指利用...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,659
精华内容 1,863
关键字:

信息的特性包括