




已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
08 届本科毕业设计(论文)外文文献翻译学 院: 计算机科学与工程学院 专 业: 网络工程 姓 名: XX XX 学 号: (用外文写)外文出处: Programming C# 4.0 附 件: 1.外文资料翻译译文;2.外文原文。附件1:外文资料翻译译文C#编程4.0介绍C#C#,读作“see sharp”是专门为.NET平台设计的编程语言。从2002年首次发布以来,C#创建了许多角色。它广泛的应用于网站服务器端以及windows桌面应用程序的客户端和服务器上。你可以用C#编写智能手机的用户界面和Xbox 360游戏。最近,微软的Sliverlight平台使得可以用C#编写可以在网页浏览器上运行的Internet应用程序。但是什么样的语言是C#?为了很好的了解一种语言并且有效的应用,仅仅专注于细节和机制是不够的,虽然在这本书中我们也将花费大量的时间来了解这些东西,但是同样重要的是了解这些细节之后的东西。因此,在本章中,我们将要了解C#建立一个什么样的问题解决机制。因此,我们将探讨这种语言的风格,并且通过各个方面来区别C#与其他语言。并且我们将在了解C#的最新演变第四个版本,中结束此章节。为什么是C#?为什么是.NET?编程语言的存在,可以让开发人员的开发工作更加的有效率。许多成功的编程语言都简化或者自动化了以前要靠繁琐的步骤才能完成的任务。有些提供新技术,使得老问题可以比以前更加有效或者在更大的规模上得到解决。当然,C#可以给你带来多大的差异取决于你的编程背景,所以这值得考虑,语言设计人员在开发C#的时候考虑了哪些种类的人。C#是针对windows平台上的开发的,并且其语法跟使用C、C+或者其他编程语言的编程人员的编程传统相似,如JavaScript和Java绘制。基本语言元素如语句、表达式、函数声明和流量控制,尽量与C家族语言接近。当然,一个熟悉的语法这个理由并不足够来选择一个语法,所以C#提供了一个生产增强特性,这个特性在它之前的语言中并没有。垃圾回收机制把开发人员从常见的内存管理问题的暴政中解救出来,如内存泄漏和循环引用。编译代码可验证类型安全机制规则了广泛的错误和潜在的安全漏洞。但是C或C+的windows开发人员可能不习惯这些功能,他们觉得这是Java淘汰下来的旧帽子,但是无论在对象模型,XML或者数据库中,Java都没有任何东西能够媲美C#为搜集信息工作所提供的“LINQ”功能。即使用其他语言编写,从外部原件集成代码也是非常痛苦的。C#中还采用了功能编程的支持,这是以前学术语言中的一个非常强大的功能。C#开发人员中使用的大多数有用的功能,许多都来自于.NET框架,它为C#提供运行环境、C#库以及所有其他.NET语言,就像VB.NET。C#是为.NET设计的,他们之间关系如此密切的一个主要好处是与框架功能的合作,就像类库一样感觉很自然。.NET Framwork 类库在C#中工作是指比语言用到的更多.NET Framwork提供的类是开发人员日常经验(他们占了这本书很大一部分内容)的一个极其重要的组成部分。大多数的库的功能分为一下三类:编写实用的功能、.NET包装windows功能和框架。第一组包括的实用工具如字典、列表和其他集合类,以及字符串处理工具如正规表达引擎。也有一些处理稍大规模的功能,例如对象模型,代表XML文档。一些类的功能的特点是围绕底层的OS的包装,例如有用于访问文件系统的类,并使用网络功能如接口。也有书面向控制台输出的类,我们可以用在任何书上都可以看到的第一个例子说明,如示例1-1所示。示例1-1。“Hello,world”示例class Programstatic void Main()System.Console.WriteLine(Hello, world);我们将在适当的时候检查所有组件,但现在,即使是这个最简单的例子也需要调用库中的类(这个例子中的System.Console类)来做这个工作。最后,类库提供整个框架以支持建设的某些种类应用。例如Windows Presentation Foundation (WPF)是建立windows桌面软件的框架;ASP.NET(这不是一个缩写,尽管出现)是一种用于构建WEB应用程序的框架。并不是所有框架都是关于用户界面的,例如Windows Communication Foundation (WCF)是专为在网络上访问其他计算机系统建立服务而设计的。这三类划分并不严格,不少类适合一分为二。例如,类库提供访问文件系统的部分不只是薄的包装围绕现有的Win32 API。他们添加新的面向对象的抽象,提供超出了基本的文件I / O服务的重要功能,所以这些类型的融入第一类和第二类。同样,框架通常需要整合与相关服务为例,虽然在一定程度上的Windows窗体UI框架有其自身独特的API,很多的基本功能是所提供的Win32组件。因此,这里的三个类别是不严格。他们只是提供了一个什么东西,你可以在类库中找到各种有用的想法。语言风格C#并不是唯一一个在.NET Framwork上运行的语言。事实上,支持多种语言一直是.NET Framwork的一个主要特点,这体现在它运行环境引擎的名字上CLR或者叫通用语言运行环境。顾名思义,.NET Framwork不只是支持一种编程语言,而是支持多种语言服务的.NET框架类库。你为什么会选择除了C#的其他语言呢?我们已经提到了一个重要的原因:C是专门为.NET设计的。如果您在C#工作中正在使用以.NET技术为基础的工具,如WPF或ASP.NET,那你就会说话他们的语言。与C+相比,它支持原始语言的.NET的扩展。扩展是经过深思熟虑的并且工作的很好,但是所调用.NET库的代码与C+并不相同。但是从正常使用,所以建立的贯通C#与标准化的C+之间的桥梁从来没有贯通过。同时这个犹如一把双刃剑,也面临着困境。比如说你能用标准的C+集合一个或者多个.NET类库中的类么?在本地.NET语言中,这些问题并不会出现。但C在这方面并不是独树一帜的。Visual Studio 2010为.NET设计了三种语言:NET的C,VB.NET和F。(虽然VB.NET从其如下非.NETVisual Basic的前辈,这是在一些重要方面截然不同。它是原生的。NET语言像VB的语法,而不是VB 6中。NET功能螺栓)。这些语言之间的选择归结到什么风格的需要的语言。F的奇特之处就在这里。这是一个功能性编程语言,严重影响由毫升语言。早在1991年,当你的作者是一年级学生,我们大学的计算机科学课程的选择毫升的第一编程语言部分,因为它是如此的学术讲座,学生没有以前遇到这样的事情。F是在频谱的学术年底,尽管仍爬下象牙塔远远不够成为一个主流标准的一部分开发环境。擅长复杂的计算和算法,有一些特点,可以帮助并行执行。然而,与许多语言功能,使一些困难的问题更容易的成本是很多在更传统的语言很容易的事情是有显着努力,在F-功能性语言,善于在复杂的问题,但可以用简单的笨拙的。F将主要用于在科学或金融应用,它似乎进行计算的复杂性,复杂相形见绌代码需要采取行动对这些计算的结果。虽然F的感觉明显等,VB.NET和C有很多相似之处。最在选择之间的这些明显的因素是,VB.NET有人更容易学习熟悉Visual Basic语法,而C将是一个熟悉的人更容易C类语言。然而,有微妙的区别在于:在语言哲学超越语法。组合性设计C#编程语言的一个一致的主题是,它的开发者倾向于选择专门的通用功能。有关于这方面的一个最明显的例子就是LINQ,C#语言中新添加的语言集成查询功能。从表面上看,这似乎添加类似SQL的查询语言功能,提供了一个自然的方式融入你的代码数据库访问。例1-2显示了一个简单查询的功能。示例1-2 使用LINQ的数据访问var californianAuthors = from author in pubs.authorswhere author.state = CAselect newauthor.au_fname,author.au_lname;foreach (var author in californianAuthors)Console.WriteLine(author);显而易见,C不知道任何有关SQL或数据库的内容。为了使用此语法,C3.0中添加了一个语言功能结合,让筏代码这种不只是用于数据库访问,而且还为XML解析,或工作对象模型。此外,许多个人的特点可以用在其他情况下,我们将在后面的章节中看到。C中喜欢小的,组合的,通用的超过单片式,专业化的特点。这一理念的一个突出的例子就是在C#中证明原型的一个功能,但最终剩下的只有:XML文本。这一个实验的语法允许内嵌XML,用编译成代码,建立模型来来表该XML的方法。C#团队的决定是省略此功能,这说明风格的偏好超过了高度专业化这一一般性的特点。而XML有很多的应用,XML的文本语法不能用于其他任何XML,而这种高度专业化在C#中会感觉到很拘束。托管代码.NET Framework提供更多的不仅仅是一个类库。它还以一种微妙的方式不直接访问调用类库而提供服务。例如,早期我们提到,C可以自动内存管理的某些方面,一个臭名昭著的C + +代码中的错误源。一旦你放弃堆分配对象他们是在C + +的,但它是正常的方式释放他们。NET编码错误。这CLR的。NET Framework的运行时环境提供服务。虽然C编译器紧密合作,使这成为可能的运行,提供您的代码如何使用对象和数据的必要的信息,这是最终运行垃圾收集工作。你以前工作时依赖什么语言,语言很大程度上依赖于运行这个想法似乎完全自然或有些令人不安。这当然是从C和C+ +的工作与不同这些语言编译器的输出可以直接执行,由计算机和虽然这些语言有一定的运行服务,它可以编写代码,没有他们可以运行。但C代码甚至无法执行不运行时的帮助。完全取决于运行时的代码称为托管代码。托管编译器不产生原始的可执行代码。相反,它们产生中间形式的代码称为白细胞介素,中间语言运行时决定。究竟如何转换成可执行的东西。一个实际结果的管理代码是一个已编译的C程序可以运行32位和64位系统不修改,甚至可以运行在不同的处理器架构,它往往可能VB.NET支持XML文本代码上运行一个基于ARM的手持设备的运行在基于Intel的未修改个人电脑,或在Xbox360游戏机的PowerPC架构。如CPU的独立有趣的可能是在实践中,最有用的方面的管理代码和IL。NET运行时,可以提供有用的服务,这都很难传统的编译系统要贯彻落实好。换句话说,这一点是使开发人员的生产力。只是前面提到的内存管理其中一个例子。其他包括安全模型,考虑到代码的起源而不是仅仅发生运行代码的用户的身份;灵活装载了强大的支持服务和版本的共享组件的机制;如何在实践中使用的代码正在运行时代码优化的基础上而不是编译器猜测它可能被使用;已经提到,符合CLR的能力,以验证该代码输入安全规则,在执行前,裁决了整体的安全和稳定的错误类。如果你是一个Java开发人员,这一切听起来相当熟悉,刚刚替补字节码IL和故事非常相似。事实上,一个受欢迎的,但有些无知的“笑话”欠周到的Java社区成员之间形容为一个贫穷的C仿爪哇。当第一个版本的C出现,差异有微妙的,但事实上,Java的去复制几个特点,从C说明的C总是比只克隆。语言变得更加明显不同每个新版本,但一个区别,目前,从一开始就显得尤为重要Windows开发C一直很容易得到的功能底层的Windows平台。连续性和windows生态系统没有成功的软件开发平台纯粹是对自己的优点上下文事项。例如,第三方组件和工具的广泛可用性平台明显更具吸引力。Windows是也许最引人注目的这种现象的例子。任何试图获得认可的新的编程系统有相当大的优势,如果它可以插入一些现有的生态系统,C和Java之间最大的区别之一是,C和。NET框架积极拥抱Windows平台上,而Java超出其隔离方式从底层的操作系统的开发。如果你正在编写一个特定的操作系统上运行的代码,它不是特别有用语言独特的工具和组件的削减你到您选择平台。而不是要求开发商与过去决裂NET提供的连续性它可能是内置的组件和服务直接或Windows内置。大多数时候,你不会需要使用这个类库提供了很多底层平台的功能的包装。然而,如果你需要使用一个第三方组件或功能的操作系统目前还没有。NET包装,工作能力等非托管功能直接从托管代码是无价的。虽然.NET中提供的功能一体化的基础平台,仍然有支持非Windows系统。微软的Silverlight可以运行的Mac OS X以及Windows的C和VB.NET代码。还有一个开源项目称为单使。NET代码在Linux上运行,以及相关的Moonlight项目是一个开源版本的Silverlight。因此,本地平台整合功能如果你不停止从多个有用的C平台要针对多个操作系统,你将不只是选择使用任何特定于平台的功能。因此,C和Java之间的哲学最大的差异是C提供平等的支持,直接使用操作系统特定功能和平台独立性。Java使得前不成比例比后者更难。最新版本的C包含的功能,提高能力,进一步。几个新的C4.0的特性使其更容易互动与Office和其他Windows使用COM自动化的应用程序,这是一个在C3.0中的薄弱点。相对缓解,开发商可以达到托管代码,使边界之外C的一个有吸引力的选择,它提供所有的管理执行的好处,但保留工作能力与在Windows环境中的任何代码,托管或没有。C4.0NET 4和Visual Studio 2010由于C有利于通用的语言功能设计要与一个组成另外,它往往不使个别新功能来形容自己的感觉。因此,而不是致力于新功能的部分或全部章节,我们将介绍他们在情况下,适当地与其他旧的语言功能集成。本节您现在正在阅读的是一个例外,当然,最主要的原因是,我们期望与C3.0已经熟悉的人通过这本书在书店浏览寻找我们的新功能的覆盖面。如果是你,欢迎书!如果您在“前言”,看看你会发现什么是在这本书中,包括一节的指南只为你,说明在哪里可以找到关于C4.0的功能材料。话虽这么说,一个主题团结在第4版的新的语言特性:它们支持动态规划,特别注重了对某些互操作性方案简单。例如,可以考虑在示例1-3C3.0的代码,使用部分Office对象模型读取Word文档的作者属性。示例1-3 C#4.0之前的互操作集的复杂性static void Main(string args)var wordApp = new Microsoft.Office.Interop.Word.Application();object fileName = WordFile.docx;object missing = System.Reflection.Missing.Value;C# 4.0, .NET 4, and Visual Studio 2010 | 7Download from Library of Wow! eBook object readOnly = true;Microsoft.Office.Interop.Word._Document doc =wordApp.Documents.Open(ref fileName, ref missing, ref readOnly,ref missing, ref missing, ref missing, ref missing, ref missing,ref missing, ref missing, ref missing, ref missing, ref missing,ref missing, ref missing, ref missing);object docProperties = doc.BuiltInDocumentProperties;Type docPropType = docProperties.GetType();object authorProp = docPropType.InvokeMember(Item,BindingFlags.Default | BindingFlags.GetProperty,null, docProperties,new object Author );Type propType = authorProp.GetType();string authorName = propType.InvokeMember(Value,BindingFlags.Default |BindingFlags.GetProperty,null, authorProp,new object ).ToString();object saveChanges = false;doc.Close(ref saveChanges, ref missing, ref missing);Console.WriteLine(authorName);这些代码相当可怕,因为很难看出这些代码在干嘛因为所有的目的都在细节中消失了。原因很不让人愉快因为办公编程模型是为动态语言而设计的,为了能在运行的时候填补很多细节。C3.0中并不能够做到这一点,所以开发商不得不手动做这些所有的工作。示例1-4显示了如何用C#4.0做同样的工作。这理解起来要简单的多,因为代码只包含有关细节。很容易看清楚操作的顺序打开文件,获取属性,检索Author属性的值并且关闭该文件。C#4.0现在能够为我们填补所有的细节,这要归功于它新的动态语言功能。示例1-4 office互操作与C#4.0static void Main(string args)var wordApp = new Microsoft.Office.Interop.Word.Application();Microsoft.Office.Interop.Word._Document doc =wordApp.Documents.Open(WordFile.docx, ReadOnly: true);dynamic docProperties = doc.BuiltInDocumentProperties;string authorName = docPropertiesAuthor.Value;doc.Close(SaveChanges: false);Console.WriteLine(authorName);附件2:外文原文Introducing C#C#-pronounced “See Sharp”-is a programming language designed for Microsofts .NET platform. Since its first release in 2002, C# has found many roles. It is widely used on the server side of websites, and also on both the client and server in line-of-business Windows desktop applications. You can write smartphone user interfaces and Xbox 360 games in C#. More recently, Microsofts Silverlight platform has made C# an option for writing Rich Internet Applications that run in a web browser. But what kind of language is C#? To understand a language well enough to use it effectively, its not enough to focus purely on the details and mechanisms, although well be spending plenty of time on those in this book. It is equally important to understand the thinking behind the details. So in this chapter, well look at what problems C# was built to solve. Then well explore the style of the language, through aspects that distinguish it from other languages. And well finish the chapter with a look at the latest step in the evolution of C#, its fourth version.Why C#? Why .NET?Programming languages exist to help developers be more productive. Many successful languages simplify or automate tedious tasks that previously had to be done by hand. Some offer new techniques that allow old problems to be tackled more effectively, or on a larger scale than before. How much difference C# can make to you will depend on your programming background, of course, so its worth considering what sorts of people the language designers had in mind when they created C#.C# is aimed at developers working on the Windows platform, and its syntax is instantly familiar to users of C or C+, or other languages that draw from the same tradition, such as JavaScript and Java. Fundamental language elements such as statements, expressions, function declarations, and flow control are modeled as closely as possible on their equivalents in C family languages.A familiar syntax is not enough of a reason to pick a language, of course, so C# offers productivity-enhancing features not found in some of its predecessors. Garbage collection frees developers from the tyranny of common memory management problems such as memory leaks and circular references. Verifiable type safety of compiled code rules out a wide range of bugs and potential security flaws. While C or C+ Windows developers may not be accustomed to those features, they will seem old hat to Java veterans, but Java has nothing to compete with the “LINQ” features C# offers for working with collections of information, whether in object models, XML documents, or databases. Integrating code from external components is remarkably painless, even those written in other languages. C# also incorporates support for functional programming, a powerful feature previously most commonly seen in academic languages.Many of the most useful features available to C# developers come from the .NET Framework, which provides the runtime environment and libraries for C#, and all other .NET languages, such as VB.NET. C# was designed for .NET, and one of the main benefits of its close relationship with the .NET Framework is that working with framework features such as the class library feels very natural.The .NET Framework Class LibraryWorking in C# means more than using just the language-the classes offered by the .NET Framework are an extremely important part of the C# developers everyday experience (and they account for a lot of this books content). Most of the library functionality falls into one of three categories: utility features written in .NET, wrappers around Windows functionality, and frameworks.The first group comprises utility types such as dictionaries, lists, and other collection classes, as well as string manipulation facilities such as a regular expression engine. There are also features that operate on a slightly larger scale, such as the object models for representing XML documents.Some library features are wrappers around underlying OS functionality. For example, there are classes for accessing the filesystem, and for using network features such as sockets. And there are classes for writing output to the console, which we can illustrate with the obligatory first example of any programming language book, shown in Example 1-1.Example 1-1. The inevitable “Hello, world” exampleclass Programstatic void Main()System.Console.WriteLine(Hello, world);Well examine all the pieces shown here in due course, but for now, note that even this simplest of examples depends on a class from the library-the System.Console class in this case-to do its job.Finally, the class library offers whole frameworks to support building certain kinds of applications. For example, Windows Presentation Foundation (WPF) is a framework for building Windows desktop software; ASP.NET (which is not an acronym, despite appearances) is a framework for building web applications. Not all frameworks are about user interfaces-Windows Communication Foundation (WCF) is designed for building services accessed over the network by other computer systems, for instance.These three categories are not strict, as quite a few classes fit into two. For example, the parts of the class library that provide access to the filesystem are not just thin wrappers around existing Win32 APIs. They add new object-oriented abstractions, providing significant functionality beyond the basic file I/O services, so these types fit into both the first and second categories. Likewise, frameworks usually need to integrate with underlying services to some extentfor example, although the Windows Forms UI framework has a distinctive API of its own, a lot of the underlying functionality is provided by Win32 components. So the three categories here are not strict. They just offer a useful idea of what sorts of things you can find in the class libraries.Language StyleC# is not the only language that runs on the .NET Framework. Indeed, support for multiple languages has always been a key feature of .NET, reflected in the name of its runtime engine, the CLR or Common Language Runtime. As this name implies, .NET is not just for one languagenumerous languages have access to the services of the .NET Framework class library. Why might you choose C# over the others?We already mentioned one important reason: C# was designed specifically for .NET. If you are working with .NET technologies such as WPF or ASP.NET, youll be speaking their language if you work in C#. Compare this with C+, which supports .NET through extensions to the original language. The extensions are carefully thought out and work well, but code that uses .NET libraries just looks different from normal C+, so programs that bridge the worlds of .NET and standard C+ never feel completely coherent. And the dual personality often presents dilemmas-should you use standard C+ collection classes or the ones in the .NET class library, for example? In native .NET languages such as C#, such questions do not emerge.But C# is not unique in this respect. Visual Studio 2010 ships with three languages designed for .NET: C#, VB.NET, and F#. (Although VB.NET follows on from its non-.NET Visual Basic predecessors, it was radically different in some important ways. It is a native .NET language with a VB-like syntax rather than VB 6 with .NET capabilities bolted on.) The choice between these languages comes down to what style of language you prefer.F# is the odd one out here. Its a functional programming language, heavily influenced by a language called ML. Back in 1991, when your authors were first-year students, our universitys computer science course chose ML for the first programming language lectures in part because it was so academic that none of the students would previously have come across anything like it. F# is still at the academic end of the spectrum despite having climbed far enough down the ivory tower to be a standard part of a mainstream development environment. It excels at complicated calculations and algorithms, and has some characteristics that can help with parallel execution. However, as with many functional languages, the cost of making some hard problems easier is that a lot of things that are easy in more traditional languages are remarkably hard in F#- functional languages are adept at complex problems, but can be clumsy with simple ones. It seems likely that F# will mostly be used in scientific or financial applications where the complexity of the computation to be performed dwarfs the complexity of the code that needs to act on the results of those calculations.While F# feels distinctly other, VB.NET and C# have a lot of similarities. The most obvious factor in choosing between these is that VB.NET is easier to learn for someone familiar with Visual Basic syntax, while C# will be easier for someone familiar with a C-like language. However, there is a subtler difference in language philosophy that goes beyond the syntax.ComposabilityA consistent theme in the design of the C# programming language is that its creators tend to prefer general-purpose features over specialized ones. The most obvious example of this is LINQ, the Language Integrated Query feature added in C# 3.0. Superficially, this appears to add SQL-like query features to the language, providing a natural way to integrate database access into your code. Example 1-2 shows a simple query.Example 1-2. Data access with LINQvar californianAuthors = from author in pubs.authorswhere author.state = CAselect newauthor.au_fname,author.au_lname;foreach (var author in californianAuthors)Console.WriteLine(author);Despite appearances, C# doesnt know anything about SQL or databases. To enable this syntax, C# 3.0 added
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安全教育心肺复苏课件
- 牧场年终总结课件
- 林业局面试题库及答案
- 科技服务业信用评价指标评分细则
- 安全教育培训通信稿课件
- 客运服务员面试题库及答案
- 考研内科面试题库及答案
- 2025年新能源行业绿色金融支持绿色产业布局研究报告
- 2025年新能源汽车电池热失控防护技术市场分析报告
- 安全教育培训记录小学课件
- GB/T 41130-2021展览场馆安全管理基本要求
- 湘美版美术一年级上册全册课件
- 环境经济学(张)课件
- 人才管理-人才选用育留课件
- 成功八步课件
- 玉石床垫讲稿课件
- 初中音乐七年级上册第一单元 红岩魂走进歌乐山
- 栈桥修复方案(全文)
- 某五星级酒店单项工程经济指标
- 【课件】《红烛》课件24张统编版高中语文必修上册
- 电气一次设备吊装搬运施工方案
评论
0/150
提交评论