詳解C#代碼生成器實(shí)現(xiàn)原理
1、目的
分別用代碼、模板生成目標(biāo)代碼文件。
方法主要包括文件讀寫、代碼生成函數(shù)、及應(yīng)用程序。
2、文件讀寫函數(shù)
/// <summary>
/// 文本文件寫
/// </summary>
/// <param name="path"></param>
/// <param name="str"></param>
public static void WriteTxt(string path, string str)
{
using (StreamWriter writer = new StreamWriter(path, true))
{
writer.WriteLine(str);
writer.Close();
}
}
/// <summary>
/// 文本文件讀
/// </summary>
/// <param name="path"></param>
/// <returns></returns>
public static string ReadTxt(string path)
{
try
{
if (!File.Exists(path))
{
return null;
}
string str = string.Empty;
using (FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read))
{
using (StreamReader sr = new StreamReader(fs))
{
str=sr.ReadToEnd();
sr.Close();
}
fs.Close();
}
return str;
}
catch (Exception e)
{
Console.WriteLine(e.Message);
return null;
}
}
3、代碼生成函數(shù)
/// <summary>
/// 代碼生成器(整體生成)
/// </summary>
/// <param name="space"></param>
/// <param name="name"></param>
public static void CsharpGenerate(string space,string name)
{
StringBuilder sb = new StringBuilder();
sb.Append("using System;\n" +
$"namespace {space}\n" +
"{\n" +
$" public class {name}" +
" {\n" +
" private string name;\n" +
" public void function(string str)\n" +
" {\n" +
" Console.WriteLine(str);\n" +
" }\n" +
" }\n"+
"}\n");
WriteTxt("E:\\generate.cs", sb.ToString());
}
/// <summary>
/// 代碼生成器(分行生成)
/// </summary>
/// <param name="space"></param>
/// <param name="name"></param>
public static void CsharpGenerateSplit(string space, string name)
{
StringBuilder sb = new StringBuilder();
sb.Append("using System;\n");
sb.Append($"namespace {space}\n");
sb.Append("{\n");
sb.Append($" public class {name}");
sb.Append(" {\n");
sb.Append(" private string name;\n");
sb.Append(" public void function(string str)\n");
sb.Append(" {\n");
sb.Append(" Console.WriteLine(str);\n");
sb.Append(" }\n");
sb.Append(" }\n");
sb.Append("}\n");
WriteTxt("E:\\generateSplit.cs", sb.ToString());
}
/// <summary>
/// 代碼生成器(模板生成)
/// </summary>
/// <param name="space"></param>
/// <param name="name"></param>
public static void CsharpGenerateTemplate(string space, string name)
{
string str = ReadTxt("E:\\generate.cs");
str = str.Replace("Demo", space);
str = str.Replace("Test", name);
WriteTxt("E:\\generateTemplate.cs", str);
}
4、應(yīng)用
static void Main(string[] args)
{
//CsharpGenerate("Demo", "Test");
//CsharpGenerateSplit("Demo", "Test");
CsharpGenerateTemplate("Nature", "Develop");
}
5、效果
generate.cs文件
using System;
namespace Demo
{
public class Test {
private string name;
public void function(string str)
{
Console.WriteLine(str);
}
}
}
generateSplit.cs文件
using System;
namespace Demo
{
public class Test {
private string name;
public void function(string str)
{
Console.WriteLine(str);
}
}
}
generateTemplate.cs文件
using System;
namespace Nature
{
public class Develop {
private string name;
public void function(string str)
{
Console.WriteLine(str);
}
}
}
到此這篇關(guān)于詳解C#代碼生成器實(shí)現(xiàn)原理的文章就介紹到這了,更多相關(guān)C#代碼生成器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
winform C#獲得Mac地址,IP地址,子網(wǎng)掩碼,默認(rèn)網(wǎng)關(guān)的實(shí)例
下面小編就為大家?guī)硪黄獁inform C#獲得Mac地址,IP地址,子網(wǎng)掩碼,默認(rèn)網(wǎng)關(guān)的實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-01-01
C#調(diào)用Oracle存儲(chǔ)過程方法介紹(附源碼)
這篇文章介紹了C#調(diào)用Oracle存儲(chǔ)過程的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-03-03
C#結(jié)合JavaScript實(shí)現(xiàn)秒殺倒計(jì)時(shí)的方法
這篇文章主要介紹了C#結(jié)合JavaScript實(shí)現(xiàn)秒殺倒計(jì)時(shí)的方法,涉及C#結(jié)合javascript操作時(shí)間的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04
C#使用SqlDataAdapter對(duì)象獲取數(shù)據(jù)的方法
這篇文章主要介紹了C#使用SqlDataAdapter對(duì)象獲取數(shù)據(jù)的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了SqlDataAdapter對(duì)象獲取數(shù)據(jù)具體步驟與相關(guān)使用技巧,需要的朋友可以參考下2016-02-02
C#實(shí)現(xiàn)漢字轉(zhuǎn)換為拼音縮寫的代碼
這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)漢字轉(zhuǎn)換為拼音縮寫的代碼,感興趣的小伙伴們可以參考一下2016-07-07
詳解C#方法中使用out參數(shù)做登錄判斷代碼實(shí)例
這篇文章主要介紹了C#使用out參數(shù)做登錄判斷,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04
淺析C# web訪問mysql數(shù)據(jù)庫(kù)-整理歸納總結(jié)
本篇文章是對(duì)C#中的web訪問mysql數(shù)據(jù)庫(kù)的一些知識(shí)點(diǎn)進(jìn)行了整理歸納總結(jié),需要的朋友可以參考下2013-07-07

