最近由于需要在框架中提供一些自定义模板的功能,找到了一篇博客,可惜似乎是翻译工具直接翻的,读不通顺,就试着自己翻译下,我不会完全翻译原文的句子,可能会对原文进行小范围的我认为更合适的句子并添加些注释,,原文地址如下:
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#实现高性能异步文件下载器(支持进度显示/断点续传)
WangMing_X
C#实现各种功能工具集 c# 开发语言 异步下载
一、应用场景分析异步文件下载器用处很大,当我们需要实现以下功能时可以用的上:大文件下载(如4K视频/安装包)避免UI线程阻塞,保证界面流畅响应多任务并行下载支持同时下载多个文件,提升带宽利用率后台静默下载结合Windows服务实现应用自动更新断点续传系统网络中断后可恢复下载(扩展实现)二、技术实现方案核心组件选择方案优点缺点WebClient代码简洁无法精细控制下载过程HttpWebRequest
【C#实现手写Ollama服务交互,实现本地模型对话】
吾与谁归in
C#学习 WPF c# Ollama Deepseek 本地模型
前言C#手写Ollama服务交互,实现本地模型对话最近使用C#调用OllamaSharpe库实现Ollama本地对话,然后思考着能否自己实现这个功能。经过一番查找,和查看OllamaSharpe源码发现确实可以。其实就是开启Ollama服务后,发送HTTP请求,获取返回结果以及一些数据处理。基本流程1、启动Ollama服务进程。2、创建HttpClient对象。3、创建请求体(参数:模型名称、提示
C# 巩固记录(五)
休#威廉姆斯
C# c# 开发语言
C#构造函数实例构造函数构造函数是类中特殊的成员函数,它的名称与它所在类的名称相同,并且没有返回值。当我们使用new关键字创建类的对象时,可以使用实例构造函数来创建和初始化类中的任意成员属性。静态构造函数静态构造函数用于初始化类中的静态数据或执行仅需执行一次的特定操作。静态构造函数将在创建第一个实例或引用类中的静态成员之前自动调用。静态构造函数具有以下特性:静态构造函数不使用访问权限修饰符修饰或不
C# &Unity 唐老狮 No.8 模拟面试题
咩咩-哈基米版
C# && Unity 面试题与算法合集 c# unity 开发语言
本文章不作任何商业用途仅作学习与交流安利唐老狮与其他老师合作的网站,内有大量免费资源和优质付费资源,我入门就是看唐老师的课程打好坚实的基础非常非常重要:全部-游习堂-唐老狮创立的游戏开发在线学习平台-PoweredByEduSoho如果你发现了文章内特殊的字体格式,那是AI补充的知识,我发现原网站下面有答案,我将会把答案以不同样式穿插在回答之中目录C#1.如果我们想为Unity中的Transfor
C#零基础入门篇(13.List<T>的基本特性)
think__deeply
c# list 开发语言 visualstudio
在C#中,`List`是一个非常常用且功能强大的泛型集合类,属于`System.Collections.Generic`命名空间。它提供了动态数组的功能,允许开发者存储、管理和操作一组相同类型的元素。以下是关于`List`的详细讲解,包括其特性、常用方法和使用场景。---###1.**`List`的基本特性**-**泛型集合**:`List`是一个泛型类,使用类型参数`T`来指定存储的元素类型。这
《C#多播委托:深入解析核心机制与实战应用指南》
Ro小陌
C# Windows Java c# windows java
在C#中,多播委托(MulticastDelegate)是一种可以引用多个方法的委托类型,它允许将多个方法绑定到同一个委托实例上,并通过一次调用触发所有方法的执行。这是事件处理机制的核心实现基础。以下从底层机制到实际应用详细解析:一、委托基础委托的本质委托是类型安全的函数指针,继承自System.MulticastDelegate类。每个委托实例内部维护一个调用列表(InvocationList)
全面掌握C#多线程编程:核心机制、高级技巧与性能调优
Ro小陌
C# Java 开发语言 c# java 开发语言
在C#中,多线程编程的深度解析需要从底层机制、运行时行为、同步原语和最佳实践等多个维度展开。以下是更深入的技术解析:一、线程与操作系统内核的交互1.线程的底层实现用户模式线程(User-ModeThreads):由CLR管理,轻量级但无法利用多核,依赖协作式调度(如async/await中的状态机)。内核模式线程(Kernel-ModeThreads):由操作系统调度,支持抢占式多任务,每个C#T
C#使用winform实现简单的梯形图指令编译和执行,带编译器和虚拟机代码
isyoungboy
c# java 开发语言
gui效果图,gui代码太长了就不贴了编译结果LD,test3NOT,STORE,TMP1LD,test1OR,LD,TMP1OUT,test2LD,TMP1RST,testLD,TMP1OUT,test22LD,TMP1OUT,test4LD,TMP1CALL,放料编译器代码usingSystem.Collections.Generic;usingSystem.Linq;namespaceLDE
C# Winform做动画卡顿怎么办?
肖无疾
游戏 gdi/gdi+ opengl directx c#
Winform用的GDI+,像全屏动画这种卡的稀巴烂,任务管理器看进程如果GPU没动静那就是渣,没加速。可以使用OpenGL或者DirectX这样有GPU加速就不卡了。OpenGL用下面这个,控件里会多出一个glControl,拖到form上CreateaWindowsApplication(.NETFramework4.6)NuGettoinstallOpenTK.GLControlNuGett
C#实现winform中渲染图的展示
幽兰的天空
C#编程 c# windows
在WinForms中实现图形的渲染展示,可以使用GDI+绘图技术。下面是一个简单的示例,演示如何在WinForms中展示一个圆形图形,并根据用户输入的半径动态改变圆的大小:请在VisualStudio中创建一个WinForms应用程序,并将以下代码添加到Form1.cs文件中:usingSystem;usingSystem.Drawing;usingSystem.Windows.Forms;nam
C# backgroundworker类
_Csharp
C#基础-高阶-实战知识点 winform c# 开发语言
概念在C#程序中,经常会有一些耗时较长的CPU密集型运算,如果直接在UI线程执行这样的运算就会出现UI不响应的问题。解决这类问题的主要途径是使用多线程,启动一个后台线程,把运算操作放在这个后台线程中完成。但是原生接口的线程操作有一些难度,如果要更进一步的去完成线程间的通信就会难上加难。C#的BackgroundWorker类是一个用于简化在桌面应用程序(如WindowsForms或WPF)中执行后
存储过程创建与调用(在SQL中)
我要打打代码
C#与SQLServer sql 数据库 sqlserver 笔记
存储过程封装一段SQL语句,让SQL语句当成一个整体(编译过),将来调用整体,性能高一些。大概类似于C#中方法。方法名,方法参数列表,返回值,输入参数in,输出参数out存储过程也有参数,也有返回值,输入参数,输出参数--1。判断某个存储过程是否已经存在,存在先删除,再创建ifexists(select*fromsysobjectswhereid=object_id(N'p_studentinfo
c# 收取邮件 解析_C# 解析eml邮件内容
weixin_39654058
c# 收取邮件 解析
usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;usingSystem.Text.RegularExpressi
C# 类的结构
weixin_48990772
c#
类现实世界,表示一类事物。比如:动物,人。类需要具象化实例化理论上类中的成员没有编写顺序。约定:字段--》构造函数--》属性--》方法
执行顺序:字段如果有初始化先执行字段初始化进入构造函数,实例构造函数可以执行多次//如果是静态构造函数会在类实例化的时候最先执行,并且只执行一次访问嵌套类和调用命名空间一样打点调用普通类中能包含实例方法、静态方法、虚方法、密封方法,不能包含抽象方法静态类中只能包含
C#在Word表格中插入图片调整大小Debug
觀星
其他 c# msword InlineShape AddPicture 自动调整单元格大小
C#在Word表格中插入图片调整大小Debug一、C#在Word表格中插入图片并调整大小二、设置单元格大小随图片大小变化一、C#在Word表格中插入图片并调整大小C#编程中在word中和Word表格中插入图片是使用InlineShapes.AddPicture方法,方法官方微软说明如下:具体示例代码见本博客下使用C#对Word进行读写、搜索、插入图片等操作文章。在Word中的表格单元格中插入图片后
C# 设置Word文档中图片的大小
luckyone906
文件IO操作
在创建Word文档时,我们经常需要向文档中插入图片,但插入图片的大小有时候可能会太大或太小,这时候我们就需要对图片的大小进行调整,使得图片与文章更加协调、美观。这篇文章将介绍如何使用FreeSpire.Doc组件和C#在Word文档中对新添加的图片和已有的图片进行大小设置。在使用以下代码前需要创建一个C#应用程序并引用Spire.Doc.dll到工程中。对新添加的图片进行大小设置//创建Docum
C#与三菱PLC的FX5U以太网通讯
视觉人机器视觉
杂说 c# 网络 开发语言 AI编程 opencv 人工智能
在C#中与三菱FX5UPLC通过以太网通信,通常使用三菱的MC协议(MELSECCommunicationProtocol)。以下是实现步骤及示例代码:PLC配置启用MC协议使用GXWorks3软件,在FX5U的模块参数中启用“TCP通信”并设置端口(默认5002)。设置IP地址为PLC分配固定IP地址,确保与C#程序在同一网络。2.C#实现步骤2.1添加命名空间usingSystem;using
构建基于ASP.NET的教务管理系统
黃昱儒
本文还有配套的精品资源,点击获取简介:教务管理系统是一个Web应用程序,利用ASP.NET技术为高校和教育机构提供全面的教务管理功能。它包括学生信息管理、课程管理、考试安排和成绩录入等核心模块。系统支持权限控制和数据管理,以确保信息安全和操作便捷。ASP.NET框架使用C#或VB.NET编程,结合.NETFramework、SQLServer或MySQL数据库以及前端技术(HTML、CSS、Jav
C# Label控件使用详解
Ro小陌
C# 开发语言 microsoft c# microsoft 开发语言
在C#中,Label控件是WindowsForms应用程序中用于显示静态文本或不可编辑信息的基础控件。它通常用于标识其他控件(如文本框、列表框等)或向用户提供说明性信息。以下是关于Label控件的详细解析:一、Label控件的基本特性用途:显示不可编辑的文本、图标或图像。交互性:默认不支持用户输入(但可通过事件实现交互,如点击事件)。轻量级:资源占用低,适合高频次使用。二、常用属性以下是Label
CefSharp 文件下载和保存功能-监听前端事件
Ben_F
CefSharp 前端
重点在启用文件下载和通过JavaScript调用C#保存文件:1.添加文件下载处理器(DownloadHandler)在VueFormService类中,添加一个实现IDownloadHandler接口的类,用于处理文件下载到本地。//新增的DownloadHandler类publicclassDownloadHandler:IDownloadHandler{publicvoidOnBeforeD
作为 .NET CAD 二次开发工程师的核心知识与建议
周杰伦fans
ai学习参考 Cad二次开发.NET笔记 学习C#的笔记 .net
作为.NETCAD二次开发工程师的核心知识与建议一、必备知识与硬性要求编程技能与工具•C#与.NET平台:◦熟练掌握C#语法、面向对象编程(OOP)、泛型、LINQ等核心特性。◦需熟悉AutoCAD.NETAPI(如acdbmgd.dll、acmgd.dll),能通过CommandMethod创建自定义命令。示例:[CommandMethod("DrawLine")]publicvoidDrawL
构建卓越的客户服务与支持:C# CRM系统深度解析
墨夶
C#学习资料1 c# 开发语言
在当今竞争激烈的商业环境中,提供优质的客户服务和支持是企业成功的关键之一。一个高效、可靠的客户关系管理(CRM)系统可以帮助企业更好地理解客户需求,提升客户满意度,并最终促进业务增长。本文将深入探讨如何使用C#开发一个功能全面的CRM系统,特别是其中的客户服务与支持模块,我们将详细讲解代码实现,并附上丰富的注释帮助你快速上手。一、需求分析与架构设计为了满足现代企业的多样化需求,我们的CRM系统需要
C#截屏操作
Luskyle
c#
//////截全屏并保存成图片///publicvoidgetScreen(){//ImagemyImage=newBitmap(Screen.PrimaryScreen.Bounds.Width,Screen.PrimaryScreen.Bounds.Height);//截取整个屏幕ImagemyImage=newBitmap(Screen.PrimaryScreen.WorkingArea.R
c# sdl 音频_使用SDL.NET教程C用C#编程游戏
cumao2792
c# 游戏 java python .net
c#sdl音频Oneoftheproblemswithopensourceisthatprojectssometimesseemtofallbythewaysideortakeconfusingturns.TakeSDL.NET.Ignoringthewebsiteforsale,asearchonthewebrevealscs-sdl.sourceforge.netaprojectthatsee
.NET Core全屏截图,C#全屏截图
王焜棟琦
C# .NET Core .netcore c#
.NETCore全屏截图,C#全屏截图使用框架:WPF.NET8usingSystem;usingSystem.Collections.Generic;usingSystem.Drawing;usingSystem.Drawing.Imaging;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Wi
c#面试题整理2
hhw199112
c# 开发语言
1.介绍一下ADO.NET的类DataSet,SqlDataAdapter,SqlConnection2.ASP.NET和ASP相比有何优点a.代码分离,apsx文件用于页面显示,aspx.cs用于后台逻辑。asp则是前后端混合在一起。b.ASP.NET实现了面向对象编程3.委托和事件的关系委托本质上算是方法接口事件算是委托的封装后的调用5.Array和ArrayList的区别Array要有初始化
C#与蓝牙的无线交响曲:开启智能设备通信的新篇章
墨夶
C#学习资料1 c# 开发语言
在万物互联的时代背景下,如何让我们的应用程序与周围的世界建立更紧密的联系?蓝牙技术作为短距离无线通信的标准之一,凭借其低功耗、易用性和广泛的设备兼容性,成为了连接各种智能设备的理想选择。对于C#开发者来说,掌握蓝牙通信技能不仅可以为项目增添亮点,还能解锁更多创新应用场景。今天,我们将一起探索如何使用C#实现蓝牙设备之间的高效数据传输,带您领略这一领域的无限魅力。C#与蓝牙通信的基本概念什么是蓝牙?
【设计原则】接口隔离原则:打造高效可维护的代码架构
OpenSeek
# 设计原则 编程基础 接口隔离原则 设计原则 C#
接口隔离原则(ISP)深度解析与实践指南一、原则定义二、问题场景分析典型反模式:"胖接口"违反ISP的危害三、解决方案实施步骤1.接口拆分策略2.重构过程示例3.组合接口技巧四、C#语言特性支持1.显式接口实现2.默认接口方法(C#8.0+)五、最佳实践建议六、复杂场景应用微服务架构中的ISP应用七、常见误区辨析八、总结与展望一、原则定义接口隔离原则(InterfaceSegregationPri
利用Aspose.PDF以编程方式打印PDF文档
刘联其
C#操作文件
使用C#打印PDF文件可以使用C#或VB.net在.NET应用程序中自动打印PDF文件。您可以按照以下简单步骤打印PDF文件:创建一个PdfViewer类的对象加载输入的PDF文档打印PDF文件下面的代码段显示了如何使用C#打印PDF文件://CreatePdfViewerobjectPdfViewerviewer=newPdfViewer();//OpeninputPDFfileviewer.B
使用PDF处理控件Aspose.PDF以编程方式打印PDF文档完整攻略
Lee-Shyllen
Aspose 文档开发 文档格式转换 PDF aspose 文档管理 文档格式转换
许多公司在很大程度上减少了纸张的使用。但是,在某些情况下打印很重要。例如,系统可能包含PDF格式的在线订单的详细信息。他们需要在分发在线订单进行交付时打印PDF。他们大规模处理项目,因此手动打印每个文档可能是一项艰巨的任务。Aspose.PDF除了许多其他文件操纵和转换功能外,还支持PDF文件的高效打印。让我们探讨以下与使用C#在.NET应用程序中打印PDF文件有关的用例:使用C#打印PDF文件使
矩阵求逆(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到设计文档中,那将会是一件非常痛苦的事情。