最近由于需要在框架中提供一些自定义模板的功能,找到了一篇博客,可惜似乎是翻译工具直接翻的,读不通顺,就试着自己翻译下,我不会完全翻译原文的句子,可能会对原文进行小范围的我认为更合适的句子并添加些注释,,原文地址如下:
http://blogs.msdn.com/b/webdev/archive/2009/01/29/t4-templates-a-quick-start-guide-for-asp-net-mvc-developers.aspx
在我们最近的博客中提到的ASP.NET MVC Release Candidate中,我们使用了T4 (Text Template Transformation Toolkit)模板来实现了Add Controller和Add View的代码自动生成功能。我们希望能使用T4给大家带来开发速度上的提升,因为用户可以在很大程度上定制这些模板。
模板的位置和重写
Add Controller和Add View都是通过在后台执行T4模板来实现代码自动生成的。通过一些工具可以修改模板来定制想要生成的代码。默认模板的位置在: [Visual Studio Install Directory]\Common7\IDE\ItemTemplates\[CSharp | VisualBasic]\Web\MVC\CodeTemplates\
你也可以把“CodeTemplates”目录复制到项目的根目录以便作为每一个项目的基础在上述位置重写和定制模板(只需要创建目录名为“CodeTemplates”的目录,并在其下创建“AddController”和“AddView”的子目录即可)。需要默认目录下有一些模板的重写可能不起作用,因为自动生成代码时将会优先选取项目目录中匹配的模板。还有一个重点需要注意,你可以为Add View功能增加自己的.tt 文件,无论是在公用目录下还是独立的项目中,添加后都可以自动的显示在Add View窗口的视图选择的下拉框中。
另外,复制上述文件夹(添加.tt文件)到项目中时,都会有警告提示,如下图:
(运行这些文本模板可能会对你的电脑产生危害。如果模板来源不可信请不要运行。)
点击“Cancel”将不能使用T4模板(如果你复制“CodeTemplates”目录并增加多个.tt文件时,你都选择了“Cancel”)。因为一旦项目发现一个.tt文件,文件的“自定义工具(CustomTool①)”属性将被设置成“TextTemplatingFileGeneraror”,它会通知Visual Studio使用默认的T4宿主(Host②)去执行这个模板并且创建一个基于此模板内容的新的文件(在模板所在的目录)。
① :自定义工具是一个实现了 Visual Studio 定义的IVsSingleFileGenerator接口的特殊组件。T4 自定义工具由Microsoft.VisualStudio.TextTemplating.VSHost.TemplatedCodeGenerator类实现并且在注册表中注册在Visual Studio 下命名为TextTemplatingFileGenerator。Visual Studio 将使用该名称查找自定义工具、创建 COM 对象并调用其IVsSingleFileGenerator.Generate 方法
② :Microsoft.VisualStudio.TextTemplating.VSHost.10.0.dll 的TextTemplatingService服务实现Microsoft.VisualStudio.TextTemplating.ITextTemplatingEngineHost接口,为代码生成引擎提供 Host (宿主)。在模板转换过程中: Engine 负责代码生成;Host负责提供转换过程中行为具体实现及所需要的的所有外部资源,ITextTemplatingEngineHost和模板内容一起传递到Engine.ProcessTempalte方法中用于代码生成
对于基于模板的一次性文件生成或简单的使用T4,生成器都可以作为好的的实现方式---但是,因为依赖于自定义模板的宿主的Add View 和Add Controller模板都包含代码(后面会提到),使用默认的生成器执行模板将会生成错误。需要复制模板到项目中之后然后清空自定义工具属性值。
注意:如果你想去掉复制.tt文件时自动设置自定义工具的映射值,你可以通过注册表实现---注意如果你想要恢复注册表为默认值,你可以执行Visual Studio的恢复安装,或手动改回。启动注册表编辑器并且找到指定的目录(根据你的机器选择是32位还是64位):
32位:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0\Generators
64位:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\9.0\Generators
展开“Generators”下第一层的每一个节点并找到“.tt”。设置“(Default)”项的值为空,就可以了。
如果你想重写全局模板,并且不想复制“CodeTemplates”目录到你的项目(大概是你已经有了个同名目录),你可以通过注册表修改Add Controller 和Add View默认的目录名。启动注册表编辑器并且找到指定的目录(根据你的机器选择是32位还是64位):
32-bit: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0\MVC\CodeTemplates
64-bit: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\9.0\MVC\CodeTemplates
改变“OverrideDir”项的值为你想要T4工具检索的目录名。需要注意的是,新设置的目录下依然需要保证与原来相同的目录结构,即包含“AddController”和“AddView”目录。
编辑T4模板
如果你使用Visual Studio打开一个.tt文件,你可能会发现它的内容没有层次---平铺在上面。我们强烈推荐你使用T4编辑器,一个Clarius Consulting开发的Visual Studio插件,它可以在你编辑模板时提供语法高亮和一些基本的T4语句的自动完成。有免费的“Community Edition”,以及更强大的“Professional Edition”---如果你有兴趣可以比较下不同的特性。下面你将会看到,这个插件真的让模板制作有了很大不同。
深入剖析T4模板
最简单的学习编辑自定义模板的方法是先看默认模板如何工作。为此,我们通过一些Add View的模板来了解“Create”(创建.tt文件)。现在从头开始:
这四行代码都是指令。
1.第一行是模板指令,它的主要作用是通知T4引擎,模板使用哪种语言编写。这里所说的模板使用的语言并不是模板会输出这种语言,而这种语言会控制模板的输出(例如,模板中可能会报刊一个 if-else语句用来控制哪些文本被输出)。在使用Add View 或者Add Controller之时,“HostSpecific”属性需要设置为“True”,否则模板将不能访问Add View 和Add Controller功能提供的信息(比如将类型绑定为View的强类型,等等)。
2.紧接着的是输出指令,它简单的通过通知模板宿主来设置模板输出文件的扩展名---这不是MVC特有的工具,因为根据不同情况可能会忽略默认的扩展名(例如,如果我们依赖partial view ,扩展名应该是.ascx)。
3.接下来的两行都是引用指令,C#中通常使用“using”,VB中使用“Imports”。如果你在模板中使用了用它们所写的代码,你需要在这个位置引用它们。
你可以在这里找到更多T4指令的文档:http://msdn.microsoft.com/en-us/library/bb126421.aspx
下面一点,注意一下后面的这行:
这行我们新建了一个变量“mvcHost”,将“Host”转换类型并赋值给它。因为我们指令中设置了“HostSpecific”属性为“True”,“Host”被自动提供给模板。MVC工具提供了一个自定义宿主,以便能将信息传递给只有工具内部可访问的模板。为了访问我们的宿主类中提供的这些属性,“Host”必须转换为我们自定义的宿主类型“MvcTextTemplateHost”。
这个变量的使用实际上非常简单:
首先需要注意的是,‘<#’ 和 ‘#>’标签之间包含有一些的代码。这两个标签用来调用语句块和包含控制代码。你的模板可能要有条件的输出文本块到输出文件中,同时保持其他文本块的正常输出。上面,我们有一个if语句(使用C#,因为模板的语言使用模板指令设置成了C#),使用了“{”。这个if语句的“}”出现在后面一些行中的的第17行,在不同的语句块中。注意,这里的这个if语句访问了宿主的“IsViewUserControl”属性,这个属性的作用是通知模板用户选择的是否是partial view。
模板中所有这些标记之外的文本块都会直接输出到实际的文件中。在上面的截图中,第14行的文本在标记块之外,因此会直接输出---尽管如此,它只会在12行的if语句值判断为“true”的情况下才会输出到文件中。
你可以在这里了解到更多关于T4语句块的信息:http://msdn.microsoft.com/en-us/library/bb126509.aspx
理解T4模板中控制代码的最简单的方法是在大脑中将它连接为一个完整的程序。我们之前在第6行声明的变量可以被之后的T4控制代码使用---之后每一个if-else分支条件都可以使用这个变量并且添加一些文本(灰色的)到输出的文件中。上面的If-else语句选择一些由模板宿主提供的属性传递给Add View模板。
后面一些行中有一个奇怪的语句块:
我们声明了一个“List”类型的变量。我们怎么能在T4代码中使用List类型的?因为可以看到我们在模板顶部的引用指令:
第56行调用了一个方法“FilterProperties”---但是方法在哪?实际上这个方法的定义在模板底部:
如果你仔细看,这个语句块有点不一样,是以“<#+”开始的。这是一个用来表示类的块,它们这样工作:T4模板带有所有的类的特征,并且将这些特征添加到在模板的后台编译的类中。这不只限于方法,还包括属性(通常包含在类中的)。像一个正规代码文件中的类成员一样,它们可以被模板中的其他代码访问。
关于类特征块的更多信息:http://msdn.microsoft.com/en-us/library/bb126541.aspx
我们的默认模板使用上面截图中的“FilterProperties”方法在默认输出中的type包含的标记过滤获得一些properties,这些标记必须是公共的和像GirdView一样可以在设计器中显示的。这与调用GridView .IsBindableType方法的结果在逻辑上是相同的。
(这段翻译的很别扭,所以附上原文,请大家帮忙指正)
Our default templates use the ‘FilterProperties’ method from the above screenshot to by default output markup only for some properties in the type – namely ones that are public and would also be displayed in the designer by things like GridView. This logic is identical to what you would get from calling the GridView.IsBindableType method.
在136行调用的“IsBindableType”是在模板后面一点位置被定义的:
如果你想改变我们模板过滤掉的某个属性,你可以按照你的喜好修改任意一个方法。
最后,看看第65行:
这里有一个新的标记开头“<#=”。它被一个表达式块调用并且用来插入T4代码的值到输出文本。像你在上面看到的,我们有一个foreach循环,迭代properties 并定义一个局部变量来循环调用“propertyName”。我们使用表达式块引用该变量,因为我们想为每一个属性名输出一个
标签。
更多关于表达式块:http://msdn.microsoft.com/en-us/library/bb126508.aspx
如你所见,上面各种使用T4模板的方法通过选择性的输出文本使T4成为一个强大的工具,帮助我们获得灵活的自定义的自动代码生成。
MVC工具的T4宿主属性
Add Controller 和Add View功能都通过模板宿主提供不同的属性给模板,上述说明贯穿了创建模板的过程。这里完整的列出了模板宿主的有效属性,供你的模板使用(注意:这些属性的实际名称可能会因为不同的版本有所不同)。
Add Controller:
Property Name
Type
Description
ItemName
System.String
带有“Controller”后缀的Controller类的名称
NameSpace
System.String
生成的Controller类的命名空间
ExtraActionMethods
System.Boolean
指示用户是否选择在Add Controller窗口中扩展Action方法
ControllerRootName
System.String
不带“Controller’”后缀的Controller类的名称
Add View:
Property Name
Type
Description
ItemName
System.String
不带扩展名的View名称,例如显示于Add View窗口中的
NameSpace
System.String
默认以View所在的目录作为命名空间
IsViewUserControl
System.Boolean
在Add View窗口中用户是否选择了partial view
IsViewContentPage
System.Boolean
用户创建View时是否带有master page
IsViewPage
System.Boolean
用户创建的是否是符合规范的视图页
MasterPage
System.String
用户在窗口中选择的master page路径 (只能在 IsViewContentPage是true的时候使用)
ContentPlaceholder
System.String
生成内容所在位置的占位符名称。是用户输入到Add View 窗口中内容占位符ID
ContentPlaceHolders
System.Collections.Generic.List
master page中所有内容占位符ID的列表, 如果View选择了master page
LanguageExtension
System.String
输出文件的扩展名 (包含”.”)
ViewDataTypeGenericString
System.String
在View指令中用来输出泛型”Inherits”属性的字符串(强类型 view). 例如: “” 或 “(Of MyType)”
ViewDataType
System.Type
被绑定的强类型View的Type对象。可以获得类型的属性信息等
此外,你会发现一些提供给宿主的用用的属性,比如正在执行的模板路径。更多关于这些属性: http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.texttemplating.itexttemplatingenginehost_properties.aspx
摘要
我们希望这篇文章带给了你足够关于T4模板的信息,能帮你有效的结合Visual Web Developer provides for ASP.NET MVC工具。你如果想知道这篇博客之外更多的信息,可以看看那的信息(Scott Hanselman’s博客不错)并看看你能得到什么。请回复您的评论,建议或问题。谢谢您的阅读!
你可能感兴趣的:(C#,编程规则)
C#中使用split分割字符串
互联网打工人no1
c#
1、用字符串分隔:usingSystem.Text.RegularExpressions;stringstr="aaajsbbbjsccc";string[]sArray=Regex.Split(str,"js",RegexOptions.IgnoreCase);foreach(stringiinsArray)Response.Write(i.ToString()+"");输出结果:aaabbbc
你可能遗漏的一些C#/.NET/.NET Core知识点
追逐时光者
C# .NET DotNetGuide编程指南 c# .net .netcore microsoft
前言在这个快速发展的技术世界中,时常会有一些重要的知识点、信息或细节被忽略或遗漏。《C#/.NET/.NETCore拾遗补漏》专栏我们将探讨一些可能被忽略或遗漏的重要知识点、信息或细节,以帮助大家更全面地了解这些技术栈的特性和发展方向。拾遗补漏GitHub开源地址https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/D
C#动态加载DLL程序集及使用反射创建实例-简记
不全
C#相关 Asp.net WebForm Asp.net MVC c# Assembly 反射 程序集
Assembly动态加载程序集:分两种情况:1、需要加载的程序集已经在程序中被引用了,则直接从当前程序域中查找即可:Assemblyassembly=AppDomain.CurrentDomain.GetAssemblies().FirstOrDefault(x=>x.GetName().Name.Contains("theAssemblyName"));2、需要加载的程序集未被加载,则使用程序集
开发游戏的学习规划
杰克逊的日记
游戏 学习
第一阶段:●C#语言快速系统地学习一遍(基础的语法、面向对象、基础的数据结构、基础的设计模式)●Unity的2D和3D部分及UI、动画、物理系统●阶段性测验:需要去用前面所学的这些基础知识来完成一个简单的2d或者3d的案例,将通过一个自制的《Flappybird》游戏案例讲解游戏开发的思想及方法,并将《Flappybird》这个游戏进一步改造成一个横版射击类游戏《Crazybird》以巩固并且升华
python可以制作大型游戏_python能做游戏吗-python能开发游戏吗
靖dede
python可以制作大型游戏
python可以写游戏,但不适合。下面我们来分析一下具体原因。用锤子能造汽车吗?谁也没法说不能吧?历史上也确实曾经有些汽车,是用锤子造出来的。但一般来说,还是用工业机器人更合适对吗?比较大型的,使用Python的游戏有两个,一个是《EVE》,还有一个是《文明》。但这仅仅是个例,没有广泛意义。一般来说,用来做游戏的语言,有两种。一是C++。。一是C#。。Python理论上,不仅不适合做游戏,而是只要
【C#生态园】深度剖析:C#嵌入式开发工具大揭秘
friklogff
C#生态园 c# 开发语言
C#嵌入式开发:全面了解六大框架与库前言随着物联网和嵌入式系统的快速发展,越来越多的开发者开始关注使用C#语言进行嵌入式开发。本文将介绍几种用于C#的嵌入式开发框架和相关库,以及它们的核心功能、安装配置方法和API概览,帮助读者了解并选择适合自己项目的工具和资源。欢迎订阅专栏:C#生态园文章目录C#嵌入式开发:全面了解六大框架与库前言1.nanoFramework:一个用于C#的嵌入式开发框架1.
Lua 与 C#交互
z2014z
lua c# 开发语言
Lua与C#交互前提Lua是一种嵌入式脚本语言,Lua的解释器是用C编写的,因此可以方便的与C/C++进行相互调用。轻量级Lua语言的官方版本只包括一个精简的核心和最基本的库,这使得Lua体积小、启动速度快,也适合嵌入在别的程序里。交互过程C#调用Lua:由C#文件调用Lua解析器底层dll库(由C语言编写),再由dll文件执行相应的Lua文件。Lua调用C#:1、Wrap方式:首先生成C#源文件
C# 开发教程-入门基础
天马3798
教程系列整理 c# 开发语言
1.C#简介、环境,程序结构2.C#基本语法,变量,控制局域,数据类型,类型转换3.C#数组、循环,Linq4.C#类,封装,方法5.C#枚举、字符串6.C#面相对象,继承,封装,多态7.C#特性、属性、反射、索引器8.C#委托,事件,集合,泛型9.C#匿名方法10.C#多线程更多:JQuery开发教程入门基础Vue开发基础入门教程Vue开发高级学习教程
C# 禁止程序重复启动
wiseyao1219
c#
修改:Program.cs[STAThread]staticvoidMain(){Mutexmutex=newMutex(true,"NewGuid123456",outboolisCreatedNew);if(!isCreatedNew){MessageBox.Show(Application.ProductName+"isrunning...");return;}Application.Ena
C#中判断socket是否已断开的方法
wiseyao1219
c#
代码如下:Sockets=newSocket(..);if(s.Poll(-1,SelectMode.SelectRead)){intnRead=s.Receive();if(nRead==0){//socket连接已断开}}参考:C#中判断socket是否已断开的方法
C#文件被占用的解决方案
花北城
C#项目 文件占用
问题打更新包时,提示文件被占用。System.IO.IOException:文件“D:\RS\RS_CCVI20111210.exe”正由另一进程使用,因此该进程无法访问该文件。在System.IO.__Error.WinIOError(Int32errorCode,StringmaybeFullPath)在System.IO.FileStream.Init(Stringpath,FileMode
C#实现软件自动升级
BruceEditCode
winform程序相对web程序而言,功能更强大,编程更方便,但软件更新却相当麻烦,要到客户端一台一台地升级,本文结合实际情况,通过软件实现自动升级,弥补了这一缺陷,有较好的参考价值。由于程序在运行时不能用新的版本覆盖自己,因此,我们将登录窗口单独做成一个可执行文件,用户登录时,从网上检测是否有新的主程序,如果有,则从后台下载并覆盖老的版本,用户输入正确的用户名和密码后,通过参数将必要的信息(如用
C# 自动化
TineAine
C# 代码片段 自动化 c# 自动化 模拟操作
实现的方法可能很笨,但是确实很好用usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Runtime.InteropServices;usingSystem.Text;usingSystem.Threading;usingSystem.Threading.Tasks;/******************
技术周总结 09.09~09.15周日(C# WinForm WPF)
打破砂锅问到底007
wpf c# WinForm
文章目录一、09.09周一1.1)问题01:Windows桌面开发中,WPF和WinForm的区别和联系?联系:区别:二、09.12周四2.1)问题01:visualstudio的相关快捷键有哪些?通用快捷键编辑导航调试窗口管理2.2)问题02:publicpartialclassChoosePLReason:CommonBaseForm2.3)问题03:介绍WindowsForms中的Syste
通过C# 裁剪PDF页面
Eiceblue
C# .NET PDF c# pdf 开发语言 visual studio
在处理PDF文档时,有时需要精确地裁剪页面以适应特定需求,比如去除广告、背景信息或者仅仅是为了简化文档内容。本文将指导如何使用免费.NET控件通过C#实现裁剪PDF页面。免费库FreeSpire.PDFfor.NET支持在.NET(C#,VB.NET,ASP.NET,.NETCore)程序中实现创建、操作、转换和打印PDF文档等操作。可以从以下链接下载产品包后手动添加引用,或者直接通过NuGet安
【Unity基础】如何选择脚本编译方式Mono和IL2CPP?
tealcwu
Unity基础 unity 游戏引擎
Edit->ProjectSettings->Player在Unity中,ScriptingBackend决定了项目的脚本编译方式,即如何将C#代码转换为可执行代码。Unity提供了两种主要的ScriptingBackend选项:Mono和IL2CPP。它们之间的区别影响了项目的性能、平台支持、编译时间和调试体验。以下是两者的详细对比:1.Mono简介:Mono是Unity最早使用的脚本后端,基于
C# Tuple、ValueTuple
語衣
C# 知识补充 c#
栏目总目录TupleTuple是C#4.0引入的一个新特性,主要用于存储一个固定数量的元素序列,且这些元素可以具有不同的类型。Tuple是一种轻量级的数据结构,非常适合用于临时存储数据,而无需定义完整的类或结构体。优点简便性:可以快速创建一个包含多个不同类型数据的对象,而无需定义新的类或结构体。灵活性:元素数量和类型在编译时确定,但可以在不同上下文中重复使用不同元素的Tuple。缺点性能:作为引用
C# Linq语句用法大全以及Lambda表达式
一个小码码
c# linq 开发语言 .net
C#Linq语句用法大全以及Lambda表达式Linq:是一种用于数据查询和操作的语言集成查询(LanguageIntegratedQuery)技术。通过Linq,我们可以使用类似于SQL查询的方式来查询、筛选和操作各种类型的数据集合,包括数组、列表、集合、XML文档、数据库表等等。常见的有:LinqtoObjects:用于操作对象集合,例如数组、列表等。LinqtoXML:用于操作XML数据,支
C#中的LInq语句
weixin_30588907
c# 数据库
语言集成查询(LINQ)是一组技术的名称,这些技术建立在将查询功能直接集成到C#语言(以及VisualBasic和可能的任何其他.NET语言)的基础上。借助于LINQ,查询现在已是高级语言构造,就如同类、方法、事件等等。对于编写查询的开发人员来说,LINQ最明显的“语言集成”部分是查询表达式。查询表达式是使用C#3.0中引入的声明性查询语法编写的。通过使用查询语法,您甚至可以使用最少的代码对数据源
C#的linq语句
木生火18624
C#开发
/查询表达式必须以form子句开头,以select或者group子句结束,在这两个子句之间,可以使用///where、orderby、join、let和其他的from子句本章要点用列表在对象上执行传统查询扩展方法LINQ查询操作符平行LNQ表达式树本章源代码下载地址(wrox.com)打开网页www.wrox.com/go/procsharp,单击DownloadCode选项卡即可下载本章源代码。
C# 多线程操作同一个文件,如何避免冲突
FlYFlOWERANDLEAF
c# 开发语言
1使用lock经测试,依然存在线程冲突privatestaticobjectlocker=newobject();……lock(locker){stringbText=File.ReadAllText(FPath);returnbText;}……lock(locker){File.WriteAllText(FPath,aContent);}2使用ReaderWriterLockSlim经测试,依然
C#LINQ常用扩展语句
月落.
C# c# linq solr
在C#中,LINQ提供了许多扩展方法,这些方法定义在System.Linq命名空间中。以下是一些常用的LINQ扩展方法:Where-过滤数据集合,返回满足条件的元素。varfilteredItems=collection.Where(item=>item.SomeProperty>10);Select-从数据集合中选择数据或创建新的投影。varprojectedItems=collection.S
source insight4.0中文乱码解决方法
鹿屿二向箔
c语言 stm32 keil mdk
Sourceinsight是强大、顺手的代码编辑器,它几乎支持所有的语言,包括:C,C++,C#,HTML等等,能够自动创建并维护它自己高性能的符号数据库,包括函数、全局变量、结构、类和工程源文件里定义的其它类型的符号,对于大工程的源码阅读非常方便。但是因为是国外软件,对中文支持不是很好,很多电脑安装使用都会出现注释乱码问题,很让人抓狂。网上很多人遇到类似的问题,也有很多解决方式,也有很多“终极解
C#基础知识-.NET,变量,容量单位,数据类型
yi碗汤园
c# 开发语言
目录1.NET简介2.变量1)定义2)声明3)赋值3.容量单位4.数据类型1)整形(整数)2)非整型(小数)3)非数值型本篇文章来分享一下C#的基础知识,主要讲述一下变量和数据类型的相关知识。1.NET简介.NETdonet是Microsoft新一代多语言的开发平台,用于构建和运行应用程序。Unity借助Mono实现跨平台,核心是.NETFramework框架。2.变量1)什么是变量变量是用来存储
C# 在WPF中实现图表生成
A_nanda
WPF赏析 c# wpf 开发语言
在现代应用程序中,数据可视化是一个重要的功能,它可以帮助用户更直观地理解数据。在C#WPF(WindowsPresentationFoundation)中,有多种方式可以生成图表。以下是五种常见的方法,每种方法都有其独特的优势和局限。1.使用System.Windows.Shapes命名空间代码示例:<RectangleWidth="50"Height="50"Fill="Blue"Canva
C#中关闭窗口清除内容
Vae_Mars
AI对话中的其他知识 c# 开发语言
1.解释说明-窗口关闭时是可以执行函数的,可以做一部分事件处理-因为删除文件夹的方案不好做,所以改成清空文件夹内的内容2.程序示例publicMainWindow(){InitializeComponent();//检查窗口关闭this.Closing+=MainWindow_Closing;}//执行具体的方法privatevoidMainWindow_Closing(objectsender,
C#中Invoke的用法()
世界太过浮夸
.net c#
转自:http://www.cnblogs.com/lsgsanxiao/p/5523282.htmlinvoke和begininvoke区别一直对invoke和begininvoke的使用和概念比较混乱,这两天看了些资料,对这两个的用法和原理有了些新的认识和理解。首先说下,invoke和begininvoke的使用有两种情况:control中的invoke、begininvoke。delegra
.NET常见面试题汇总
.Net Core 爱好者
.net c#
首先,汇总一共分为三部分:一是关于.NET技术的面试问题,二是关于.NET项目中的实际问题,三是历年出现过一些面试题汇总一、.NET技术面试问题请简述.NET中的装箱和拆箱。什么是泛型,以及它在.NET中的用途?请解释一下C#中的委托是什么,以及它们如何工作?什么是事件,如何使用它们?请解释一下C#中的特性(Attributes)及其应用场景。.NET中的异步编程模式有哪些?什么是LINQ,它在.
c# net8调用vc写的dll
wiseyao1219
c# 开发语言 dll
dll程序(vc,x86)头文件extern"C"int__declspec(dllexport)WINAPIadd(inta,intb);实现intWINAPIadd(inta,intb){returna+b;}c#/net8函数声明:[DllImport("dll/Dll1.dll",CallingConvention=CallingConvention.StdCall)]publicstat
c# json使用
wiseyao1219
c# json 前端
安装包用NuGet安装包:Newtonsoft.Json对象转为Json字符串publicclassPerson{publicstringName{get;set;}publicintAge{get;set;}}Personperson=newPerson{Name="JohnDoe",Age=30};stringjson2=JsonConvert.SerializeObject(person);
矩阵求逆(JAVA)初等行变换
qiuwanchi
矩阵求逆(JAVA)
package gaodai.matrix;
import gaodai.determinant.DeterminantCalculation;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/**
* 矩阵求逆(初等行变换)
* @author 邱万迟
*
JDK timer
antlove
java jdk schedule code timer
1.java.util.Timer.schedule(TimerTask task, long delay):多长时间(毫秒)后执行任务
2.java.util.Timer.schedule(TimerTask task, Date time):设定某个时间执行任务
3.java.util.Timer.schedule(TimerTask task, long delay,longperiod
JVM调优总结 -Xms -Xmx -Xmn -Xss
coder_xpf
jvm 应用服务器
堆大小设置JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制。32位系统下,一般限制在1.5G~2G;64为操作系统对内存无限制。我在Windows Server 2003 系统,3.5G物理内存,JDK5.0下测试,最大可设置为1478m。
典型设置:
java -Xmx
JDBC连接数据库
Array_06
jdbc
package Util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class JDBCUtil {
//完
Unsupported major.minor version 51.0(jdk版本错误)
oloz
java
java.lang.UnsupportedClassVersionError: cn/support/cache/CacheType : Unsupported major.minor version 51.0 (unable to load class cn.support.cache.CacheType)
at org.apache.catalina.loader.WebappClassL
用多个线程处理1个List集合
362217990
多线程 thread list 集合
昨天发了一个提问,启动5个线程将一个List中的内容,然后将5个线程的内容拼接起来,由于时间比较急迫,自己就写了一个Demo,希望对菜鸟有参考意义。。
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CountDownLatch;
public c
JSP简单访问数据库
香水浓
sql mysql jsp
学习使用javaBean,代码很烂,仅为留个脚印
public class DBHelper {
private String driverName;
private String url;
private String user;
private String password;
private Connection connection;
privat
Flex4中使用组件添加柱状图、饼状图等图表
AdyZhang
Flex
1.添加一个最简单的柱状图
? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
<?xml version=
"1.0"&n
Android 5.0 - ProgressBar 进度条无法展示到按钮的前面
aijuans
android
在低于SDK < 21 的版本中,ProgressBar 可以展示到按钮前面,并且为之在按钮的中间,但是切换到android 5.0后进度条ProgressBar 展示顺序变化了,按钮再前面,ProgressBar 在后面了我的xml配置文件如下:
[html]
view plain
copy
<RelativeLa
查询汇总的sql
baalwolf
sql
select list.listname, list.createtime,listcount from dream_list as list , (select listid,count(listid) as listcount from dream_list_user group by listid order by count(
Linux du命令和df命令区别
BigBird2012
linux
1,两者区别
du,disk usage,是通过搜索文件来计算每个文件的大小然后累加,du能看到的文件只是一些当前存在的,没有被删除的。他计算的大小就是当前他认为存在的所有文件大小的累加和。
AngularJS中的$apply,用还是不用?
bijian1013
JavaScript AngularJS $apply
在AngularJS开发中,何时应该调用$scope.$apply(),何时不应该调用。下面我们透彻地解释这个问题。
但是首先,让我们把$apply转换成一种简化的形式。
scope.$apply就像一个懒惰的工人。它需要按照命
[Zookeeper学习笔记十]Zookeeper源代码分析之ClientCnxn数据序列化和反序列化
bit1129
zookeeper
ClientCnxn是Zookeeper客户端和Zookeeper服务器端进行通信和事件通知处理的主要类,它内部包含两个类,1. SendThread 2. EventThread, SendThread负责客户端和服务器端的数据通信,也包括事件信息的传输,EventThread主要在客户端回调注册的Watchers进行通知处理
ClientCnxn构造方法
&
【Java命令一】jmap
bit1129
Java命令
jmap命令的用法:
[hadoop@hadoop sbin]$ jmap
Usage:
jmap [option] <pid>
(to connect to running process)
jmap [option] <executable <core>
(to connect to a
Apache 服务器安全防护及实战
ronin47
此文转自IBM.
Apache 服务简介
Web 服务器也称为 WWW 服务器或 HTTP 服务器 (HTTP Server),它是 Internet 上最常见也是使用最频繁的服务器之一,Web 服务器能够为用户提供网页浏览、论坛访问等等服务。
由于用户在通过 Web 浏览器访问信息资源的过程中,无须再关心一些技术性的细节,而且界面非常友好,因而 Web 在 Internet 上一推出就得到
unity 3d实例化位置出现布置?
brotherlamp
unity教程 unity unity资料 unity视频 unity自学
问:unity 3d实例化位置出现布置?
答:实例化的同时就可以指定被实例化的物体的位置,即 position
Instantiate (original : Object, position : Vector3, rotation : Quaternion) : Object
这样你不需要再用Transform.Position了,
如果你省略了第二个参数(
《重构,改善现有代码的设计》第八章 Duplicate Observed Data
bylijinnan
java 重构
import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.Label;
import java.awt.TextField;
import java.awt.event.FocusAdapter;
import java.awt.event.FocusE
struts2更改struts.xml配置目录
chiangfai
struts.xml
struts2默认是读取classes目录下的配置文件,要更改配置文件目录,比如放在WEB-INF下,路径应该写成../struts.xml(非/WEB-INF/struts.xml)
web.xml文件修改如下:
<filter>
<filter-name>struts2</filter-name>
<filter-class&g
redis做缓存时的一点优化
chenchao051
redis hadoop pipeline
最近集群上有个job,其中需要短时间内频繁访问缓存,大概7亿多次。我这边的缓存是使用redis来做的,问题就来了。
首先,redis中存的是普通kv,没有考虑使用hash等解结构,那么以为着这个job需要访问7亿多次redis,导致效率低,且出现很多redi
mysql导出数据不输出标题行
daizj
mysql 数据导出 去掉第一行 去掉标题
当想使用数据库中的某些数据,想将其导入到文件中,而想去掉第一行的标题是可以加上-N参数
如通过下面命令导出数据:
mysql -uuserName -ppasswd -hhost -Pport -Ddatabase -e " select * from tableName" > exportResult.txt
结果为:
studentid
phpexcel导出excel表简单入门示例
dcj3sjt126com
PHP Excel phpexcel
先下载PHPEXCEL类文件,放在class目录下面,然后新建一个index.php文件,内容如下
<?php
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
if (PHP_SAPI == 'cli')
die('
爱情格言
dcj3sjt126com
格言
1) I love you not because of who you are, but because of who I am when I am with you. 我爱你,不是因为你是一个怎样的人,而是因为我喜欢与你在一起时的感觉。 2) No man or woman is worth your tears, and the one who is, won‘t
转 Activity 详解——Activity文档翻译
e200702084
android UI sqlite 配置管理 网络应用
activity 展现在用户面前的经常是全屏窗口,你也可以将 activity 作为浮动窗口来使用(使用设置了 windowIsFloating 的主题),或者嵌入到其他的 activity (使用 ActivityGroup )中。 当用户离开 activity 时你可以在 onPause() 进行相应的操作 。更重要的是,用户做的任何改变都应该在该点上提交 ( 经常提交到 ContentPro
win7安装MongoDB服务
geeksun
mongodb
1. 下载MongoDB的windows版本:mongodb-win32-x86_64-2008plus-ssl-3.0.4.zip,Linux版本也在这里下载,下载地址: http://www.mongodb.org/downloads
2. 解压MongoDB在D:\server\mongodb, 在D:\server\mongodb下创建d
Javascript魔法方法:__defineGetter__,__defineSetter__
hongtoushizi
js
转载自: http://www.blackglory.me/javascript-magic-method-definegetter-definesetter/
在javascript的类中,可以用defineGetter和defineSetter_控制成员变量的Get和Set行为
例如,在一个图书类中,我们自动为Book加上书名符号:
function Book(name){
错误的日期格式可能导致走nginx proxy cache时不能进行304响应
jinnianshilongnian
cache
昨天在整合某些系统的nginx配置时,出现了当使用nginx cache时无法返回304响应的情况,出问题的响应头: Content-Type:text/html; charset=gb2312 Date:Mon, 05 Jan 2015 01:58:05 GMT Expires:Mon , 05 Jan 15 02:03:00 GMT Last-Modified:Mon, 05
数据源架构模式之行数据入口
home198979
PHP 架构 行数据入口
注:看不懂的请勿踩,此文章非针对java,java爱好者可直接略过。
一、概念
行数据入口(Row Data Gateway):充当数据源中单条记录入口的对象,每行一个实例。
二、简单实现行数据入口
为了方便理解,还是先简单实现:
<?php
/**
* 行数据入口类
*/
class OrderGateway {
/*定义元数
Linux各个目录的作用及内容
pda158
linux 脚本
1)根目录“/” 根目录位于目录结构的最顶层,用斜线(/)表示,类似于
Windows
操作系统的“C:\“,包含Fedora操作系统中所有的目录和文件。 2)/bin /bin 目录又称为二进制目录,包含了那些供系统管理员和普通用户使用的重要
linux命令的二进制映像。该目录存放的内容包括各种可执行文件,还有某些可执行文件的符号连接。常用的命令有:cp、d
ubuntu12.04上编译openjdk7
ol_beta
HotSpot jvm jdk OpenJDK
获取源码
从openjdk代码仓库获取(比较慢)
安装mercurial Mercurial是一个版本管理工具。 sudo apt-get install mercurial
将以下内容添加到$HOME/.hgrc文件中,如果没有则自己创建一个: [extensions] forest=/home/lichengwu/hgforest-crew/forest.py fe
将数据库字段转换成设计文档所需的字段
vipbooks
设计模式 工作 正则表达式
哈哈,出差这么久终于回来了,回家的感觉真好!
PowerDesigner的物理数据库一出来,设计文档中要改的字段就多得不计其数,如果要把PowerDesigner中的字段一个个Copy到设计文档中,那将会是一件非常痛苦的事情。