Razor深入系列3體系結構概述

2021-09-06 02:12:30 字數 2673 閱讀 7631

目錄

1 再續前緣

2 體系結構

3 核心類介紹

我們知道裡面一定就是寫著具體他是如何把混搭@**和html給分離出來的

方法了。

進去之後是system.web.razor.parser類了。

在這個類裡面定義了

internal parserbase codeparser 基類

internal markupparser markupparser html分析者

public bool designtimemode 表示是否是設計時。

他的方法主要是兩個

public virtual void parse(lookaheadtextreader input, parservisitor visitor)  }

protected

bool

intemporarybuffer  } 

protected

bool

designtimemode  } 

protected

bool

endoffile  } 

protected

char

currentcharacter  }

////當前的字元 

protected

sourcelocation currentlocation  }

//細心一點你會發現對其簡單封裝的方法也很有多。

//protected

idisposable startblock(blocktype type, 

bool

outputcurrentastransition 

=true

) protected

void

endblock()  

protected

void

output(span span) 

protected

void

onerror(sourcelocation location, 

string

message) 

protected

void

onerror(sourcelocation location, 

string

message, 

params

object

args) 

protected

void

end(spanfactory spanfactory) 

protected

void

end(spanfactory spanfactory, 

bool

allowempty)  

end(spanfactory(context)); } }

protected

void

end(span span) 

由此可知,parserbase及其基礎類只是parsercontent的輔助方法。但是對於所有content,內容的操作還是全部由parserconetnt 操作。

2他的工作是執行具體的分析工作。

由他的派生類來覺得誰是c#**誰是html。幷包裝成syntaxtreenode類以供visitor生成**,當然他並不知道誰是visitor,他只是簡單的把他交給了parsercontent

他是用來生成**的。他的對外宣稱自己的工作:凡是下面的事都能搞定。

public abstract void visitstartblock(blocktype type);

public abstract void visitspan(span span);

public abstract void visitendblock(blocktype type);

public abstract void visiterror(razorerror err);

public abstract void oncomplete();

他本身並不做事,但大家卻通過它來進行交流和溝通。

並通過它來分類這是**,那是注釋等。

他主要有兩個概念比較重要

1 block:主要是乙個集合。包含自身和父類的乙個集合。

public

ienumerable

<

syntaxtreenode

>

children 

本身並不標註是什麼型別。

2 span :這裡表明了具體的型別如注釋,html或**。

public

spankind kind 

這個屬性表明

以上簡單的說明了一下裡面一層的體系結構。各個主要基類的作用及其一些主要需要清楚的概念。穿插了一些他們之間是如何溝通的。

下一次再寫他是如何具體分析的之類的吧:)

希望能給正在分析原始碼的同學和在看razor原始碼的同學一點幫助。

razor系列參考

原始碼分析系列

postgresql系列之體系結構

postgresql 資料庫是由一系列位於檔案系統上的物理檔案組成。在資料庫執行過程中,管理這些物理檔案。通常這些物理檔案稱為資料庫。在postgresql中有乙個資料庫集簇 database cluster 的概念,它是指由單個postgresql伺服器例項管理的資料庫集合,組成資料庫集簇的這些資...

ARM Cortex M3體系結構

來自 arm cortex m3處理器體系結構.ppt 定位 概況 cortex m3核心 核心流水線分3個階段 取指 解碼和執行。當遇到 分支指令時,解碼階段也包含 的指令取指,這提高了執行的速度。處理器在解碼階段期間自行對分支目的地指令進行取指。在稍後的執行過程中,處理完分支指令後便知道下一條要...

Oracle體系結構理解(3)

伺服器程序與後台程序 伺服器程序與後台程序也是兩個不同的概念,伺服器程序也叫做前台程序,在oracle伺服器中負責與client端的連線。每當clinet端產生乙個使用者程序來連線資料庫,資料庫會產生相應的伺服器程序和埠號來與之進行連線,在專用伺服器中哦個這是一對一的關係,在共享伺服器中則會採用排程...