Index: /BasicCompiler32/BasicCompiler.vcproj
===================================================================
--- /BasicCompiler32/BasicCompiler.vcproj	(revision 134)
+++ /BasicCompiler32/BasicCompiler.vcproj	(revision 135)
@@ -1822,4 +1822,12 @@
 					Name="Meta Parts"
 					>
+					<File
+						RelativePath="..\BasicCompiler_Common\src\Member.cpp"
+						>
+					</File>
+					<File
+						RelativePath="..\BasicCompiler_Common\src\Method.cpp"
+						>
+					</File>
 					<File
 						RelativePath="..\BasicCompiler_Common\src\Namespace.cpp"
@@ -1956,8 +1964,4 @@
 					</File>
 					<File
-						RelativePath="..\BasicCompiler_Common\include\Prototype.h"
-						>
-					</File>
-					<File
 						RelativePath="..\BasicCompiler_Common\Type.h"
 						>
@@ -1971,4 +1975,20 @@
 						>
 					</File>
+					<Filter
+						Name="Prototype"
+						>
+						<File
+							RelativePath="..\BasicCompiler_Common\include\Member.h"
+							>
+						</File>
+						<File
+							RelativePath="..\BasicCompiler_Common\include\Method.h"
+							>
+						</File>
+						<File
+							RelativePath="..\BasicCompiler_Common\include\Prototype.h"
+							>
+						</File>
+					</Filter>
 				</Filter>
 				<Filter
Index: /BasicCompiler32/Compile_Calc.cpp
===================================================================
--- /BasicCompiler32/Compile_Calc.cpp	(revision 134)
+++ /BasicCompiler32/Compile_Calc.cpp	(revision 135)
@@ -622,5 +622,5 @@
 		// Blittable型をオブジェクトとして扱う
 		vector<UserProc *> userProcs;
-		Smoothie::Meta::blittableTypes.GetClass( calcType ).EnumStaticMethod( "_Create", userProcs );
+		Smoothie::Meta::blittableTypes.GetClass( calcType ).GetStaticMethods().EnumStatic( "_Create", userProcs );
 		if( userProcs.size() != 1 ){
 			SetError();
Index: /BasicCompiler32/Compile_CallProc.cpp
===================================================================
--- /BasicCompiler32/Compile_CallProc.cpp	(revision 134)
+++ /BasicCompiler32/Compile_CallProc.cpp	(revision 135)
@@ -113,5 +113,5 @@
 	bool isStatic = false;
 	const CClass *pobj_c = NULL;
-	CMethod *pMethod = NULL;
+	const CMethod *pMethod = NULL;
 	if( pUserProc->GetParentClassPtr() ){
 		//クラスのメンバ関数を呼び出す場合はアクセスチェックを行う
@@ -153,8 +153,8 @@
 		/////////////////////////////////
 		pMethod = NULL;
-		if( ! isStatic ) pMethod = pobj_c->GetMethodInfo( pUserProc );
+		if( ! isStatic ) pMethod = pobj_c->GetMethods().GetMethodPtr( pUserProc );
 		if( ! pMethod ){
 			//動的メソッドが取得できなかったときは静的メソッドを当たる
-			pMethod = pobj_c->GetStaticMethodInfo( pUserProc );
+			pMethod = pobj_c->GetStaticMethods().GetMethodPtr( pUserProc );
 			if( !pMethod ){
 				SetError(300,NULL,cp);
@@ -276,5 +276,5 @@
 			else{
 				RELATIVE_VAR RelativeVar;
-				if( pMethod->isConst ){
+				if( pMethod->IsConst() ){
 					//Constアクセスが可能なメソッドの場合
 					if( !GetVarOffsetReadOnly( ObjectName, &RelativeVar, Type() ) ){
Index: /BasicCompiler32/Compile_Object.cpp
===================================================================
--- /BasicCompiler32/Compile_Object.cpp	(revision 134)
+++ /BasicCompiler32/Compile_Object.cpp	(revision 135)
@@ -36,5 +36,5 @@
 
 	std::vector<UserProc *> subs;
-	pobj_c->EnumMethod( pobj_c->GetName().c_str(), subs );
+	pobj_c->GetMethods().Enum( pobj_c->GetName().c_str(), subs );
 
 	UserProc *pUserProc;
@@ -56,5 +56,5 @@
 		// obj._System_SetType( _System_TypeBase.Search( strNamespace, name ) )
 		subs.clear();
-		pobj_c->EnumMethod( "_System_SetType", subs );
+		pobj_c->GetMethods().Enum( "_System_SetType", subs );
 		if( subs.size() == 1 ){
 			char temporary[VN_SIZE];
@@ -208,5 +208,5 @@
 
 
-	CMethod *method = classObj.GetDestructorMethod();
+	const CMethod *method = classObj.GetDestructorMethod();
 	if( method == NULL ) return;
 
Index: /BasicCompiler32/Compile_ProcOp.cpp
===================================================================
--- /BasicCompiler32/Compile_ProcOp.cpp	(revision 134)
+++ /BasicCompiler32/Compile_ProcOp.cpp	(revision 135)
@@ -599,5 +599,5 @@
 					基底クラスのデストラクタを呼び出す */
 
-				CMethod *method = pobj_CompilingClass->pobj_InheritsClass->GetDestructorMethod();
+				const CMethod *method = pobj_CompilingClass->pobj_InheritsClass->GetDestructorMethod();
 				if( method ){
 					Opcode_CallProc("",
Index: /BasicCompiler32/Compile_Statement.cpp
===================================================================
--- /BasicCompiler32/Compile_Statement.cpp	(revision 134)
+++ /BasicCompiler32/Compile_Statement.cpp	(revision 135)
@@ -1075,5 +1075,5 @@
 				if(type1.IsObject()){
 					std::vector<UserProc *> subs;
-					type1.GetClass().EnumMethod( CALC_EQUAL, subs );
+					type1.GetClass().GetMethods().Enum( CALC_EQUAL, subs );
 					if( subs.size() == 0 ){
 						return;
Index: /BasicCompiler32/Compile_Var.cpp
===================================================================
--- /BasicCompiler32/Compile_Var.cpp	(revision 134)
+++ /BasicCompiler32/Compile_Var.cpp	(revision 135)
@@ -445,5 +445,7 @@
 
 			for(i=0;i<pobj_CompilingClass->iMemberNum;i++){
-				if(lstrcmp(VarName,pobj_CompilingClass->ppobj_Member[i]->name)==0) break;
+				if( pobj_CompilingClass->ppobj_Member[i]->GetName() == VarName ){
+					break;
+				}
 			}
 			if(i==pobj_CompilingClass->iMemberNum) goto NonClassMember;
@@ -452,7 +454,7 @@
 		//Const修飾子のメソッド内でメンバ書き込みアクセスが発生したとき
 		//（コンストラクタ、デストラクタ内を除く）
-		CMethod *pMethod = pobj_DBClass->GetNowCompilingMethodInfo();
+		const CMethod *pMethod = pobj_DBClass->GetNowCompilingMethodInfo();
 		if( isWriteAccess &&
-			pMethod->isConst &&
+			pMethod->IsConst() &&
 			pobj_CompilingClass->IsCompilingConstructor() == false &&
 			pobj_CompilingClass->IsCompilingDestructor() == false
@@ -750,5 +752,5 @@
 				i=GetOneParameter(InitBuf,i,temporary);
 
-				i3=objClass.GetMemberOffset( objClass.ppobj_Member[i2]->name, NULL );
+				i3=objClass.GetMemberOffset( objClass.ppobj_Member[i2]->GetName().c_str(), NULL );
 
 				if(!SetInitGlobalData(offset+i3,
@@ -886,5 +888,5 @@
 				i=GetOneParameter(InitBuf,i,temporary);
 
-				i3=objClass.GetMemberOffset( objClass.ppobj_Member[i2]->name, NULL );
+				i3=objClass.GetMemberOffset( objClass.ppobj_Member[i2]->GetName().c_str(), NULL );
 
 				if(!InitLocalVar(offset+i3,
Index: /BasicCompiler32/NumOpe.cpp
===================================================================
--- /BasicCompiler32/NumOpe.cpp	(revision 134)
+++ /BasicCompiler32/NumOpe.cpp	(revision 135)
@@ -181,5 +181,5 @@
 	GetVarFormatString(methodName,parameter,lpPtrOffset,dummy,refType);
 
-	objClass.EnumMethod( methodName, userProcs );
+	objClass.GetMethods().Enum( methodName, userProcs );
 	UserProc *pUserProc;
 	if(userProcs.size()){
Index: /BasicCompiler32/OperatorProc.cpp
===================================================================
--- /BasicCompiler32/OperatorProc.cpp	(revision 134)
+++ /BasicCompiler32/OperatorProc.cpp	(revision 135)
@@ -5,5 +5,5 @@
 	if(!IsSafeReg(reg)) SetError(300,NULL,cp);
 
-	CMethod *method = pobj_c->GetDestructorMethod();
+	const CMethod *method = pobj_c->GetDestructorMethod();
 	if( method ){
 		//push reg
@@ -28,5 +28,5 @@
 
 	std::vector<UserProc *> subs;
-	pobj_c->EnumMethod( idCalc, subs );
+	pobj_c->GetMethods().Enum( idCalc, subs );
 	if( subs.size() == 0 ){
 		return 0;
@@ -250,5 +250,5 @@
 void CallIndexerGetterProc(const CClass *pobj_Class,char *ObjectName,char *Parameter,Type &resultType){
 	std::vector<UserProc *> subs;
-	pobj_Class->EnumMethod( CALC_ARRAY_GET, subs );
+	pobj_Class->GetMethods().Enum( CALC_ARRAY_GET, subs );
 	if( subs.size() == 0 ){
 		return;
Index: /BasicCompiler64/BasicCompiler.vcproj
===================================================================
--- /BasicCompiler64/BasicCompiler.vcproj	(revision 134)
+++ /BasicCompiler64/BasicCompiler.vcproj	(revision 135)
@@ -480,4 +480,12 @@
 					>
 					<File
+						RelativePath="..\BasicCompiler_Common\include\Member.h"
+						>
+					</File>
+					<File
+						RelativePath="..\BasicCompiler_Common\include\Method.h"
+						>
+					</File>
+					<File
 						RelativePath="..\BasicCompiler_Common\include\Namespace.h"
 						>
@@ -1560,4 +1568,12 @@
 					>
 					<File
+						RelativePath="..\BasicCompiler_Common\src\Member.cpp"
+						>
+					</File>
+					<File
+						RelativePath="..\BasicCompiler_Common\src\Method.cpp"
+						>
+					</File>
+					<File
 						RelativePath="..\BasicCompiler_Common\src\Namespace.cpp"
 						>
@@ -1565,4 +1581,8 @@
 					<File
 						RelativePath="..\BasicCompiler_Common\Procedure.cpp"
+						>
+					</File>
+					<File
+						RelativePath="..\BasicCompiler_Common\src\Prototype.cpp"
 						>
 					</File>
Index: /BasicCompiler64/Compile_Calc.cpp
===================================================================
--- /BasicCompiler64/Compile_Calc.cpp	(revision 134)
+++ /BasicCompiler64/Compile_Calc.cpp	(revision 135)
@@ -230,5 +230,5 @@
 		// Blittable型をオブジェクトとして扱う
 		vector<UserProc *> userProcs;
-		Smoothie::Meta::blittableTypes.GetClass( calcType ).EnumStaticMethod( "_Create", userProcs );
+		Smoothie::Meta::blittableTypes.GetClass( calcType ).GetStaticMethods().EnumStatic( "_Create", userProcs );
 		if( userProcs.size() != 1 ){
 			SetError();
Index: /BasicCompiler64/Compile_CallProc.cpp
===================================================================
--- /BasicCompiler64/Compile_CallProc.cpp	(revision 134)
+++ /BasicCompiler64/Compile_CallProc.cpp	(revision 135)
@@ -118,5 +118,5 @@
 	bool isStatic = false;
 	const CClass *pobj_c = NULL;
-	CMethod *pMethod = NULL;
+	const CMethod *pMethod = NULL;
 	if( pUserProc->GetParentClassPtr() ){
 		//クラスのメンバ関数を呼び出す場合はアクセスチェックを行う
@@ -158,8 +158,8 @@
 		/////////////////////////////////
 		pMethod = NULL;
-		if( ! isStatic ) pMethod = pobj_c->GetMethodInfo( pUserProc );
+		if( ! isStatic ) pMethod = pobj_c->GetMethods().GetMethodPtr( pUserProc );
 		if( ! pMethod ){
 			//動的メソッドが取得できなかったときは静的メソッドを当たる
-			pMethod = pobj_c->GetStaticMethodInfo( pUserProc );
+			pMethod = pobj_c->GetStaticMethods().GetMethodPtr( pUserProc );
 			if( !pMethod ){
 				SetError(300,NULL,cp);
@@ -308,5 +308,5 @@
 			else{
 				RELATIVE_VAR RelativeVar;
-				if( pMethod->isConst ){
+				if( pMethod->IsConst() ){
 					//Constアクセスが可能なメソッドの場合
 					if( !GetVarOffsetReadOnly( ObjectName, &RelativeVar, Type() ) ){
Index: /BasicCompiler64/Compile_Object.cpp
===================================================================
--- /BasicCompiler64/Compile_Object.cpp	(revision 134)
+++ /BasicCompiler64/Compile_Object.cpp	(revision 135)
@@ -34,5 +34,5 @@
 
 	std::vector<UserProc *> subs;
-	pobj_c->EnumMethod( pobj_c->GetName().c_str(), subs );
+	pobj_c->GetMethods().Enum( pobj_c->GetName().c_str(), subs );
 
 	UserProc *pUserProc;
@@ -54,5 +54,5 @@
 		// obj._System_SetType( _System_TypeBase.Search( strNamespace, name ) )
 		subs.clear();
-		pobj_c->EnumMethod( "_System_SetType", subs );
+		pobj_c->GetMethods().Enum( "_System_SetType", subs );
 		if( subs.size() == 1 ){
 			char temporary[VN_SIZE];
@@ -179,5 +179,5 @@
 
 
-	CMethod *method = classObj.GetDestructorMethod();
+	const CMethod *method = classObj.GetDestructorMethod();
 	if( method == NULL ) return;
 
Index: /BasicCompiler64/Compile_ProcOp.cpp
===================================================================
--- /BasicCompiler64/Compile_ProcOp.cpp	(revision 134)
+++ /BasicCompiler64/Compile_ProcOp.cpp	(revision 135)
@@ -650,5 +650,5 @@
 					基底クラスのデストラクタを呼び出す */
 
-				CMethod *method = pobj_CompilingClass->pobj_InheritsClass->GetDestructorMethod();
+				const CMethod *method = pobj_CompilingClass->pobj_InheritsClass->GetDestructorMethod();
 				if( method ){
 					Opcode_CallProc("",
Index: /BasicCompiler64/Compile_Statement.cpp
===================================================================
--- /BasicCompiler64/Compile_Statement.cpp	(revision 134)
+++ /BasicCompiler64/Compile_Statement.cpp	(revision 135)
@@ -733,5 +733,5 @@
 				if(type1.IsObject()){
 					std::vector<UserProc *> subs;
-					type1.GetClass().EnumMethod( CALC_EQUAL, subs );
+					type1.GetClass().GetMethods().Enum( CALC_EQUAL, subs );
 					if( subs.size() == 0 ){
 						return;
Index: /BasicCompiler64/Compile_Var.cpp
===================================================================
--- /BasicCompiler64/Compile_Var.cpp	(revision 134)
+++ /BasicCompiler64/Compile_Var.cpp	(revision 135)
@@ -472,5 +472,7 @@
 
 			for(i=0;i<pobj_CompilingClass->iMemberNum;i++){
-				if(lstrcmp(VarName,pobj_CompilingClass->ppobj_Member[i]->name)==0) break;
+				if( pobj_CompilingClass->ppobj_Member[i]->GetName() == VarName ){
+					break;
+				}
 			}
 			if(i==pobj_CompilingClass->iMemberNum) goto NonClassMember;
@@ -479,7 +481,7 @@
 		//Const修飾子のメソッド内でメンバ書き込みアクセスが発生したとき
 		//（コンストラクタ、デストラクタ内を除く）
-		CMethod *pMethod = pobj_DBClass->GetNowCompilingMethodInfo();
+		const CMethod *pMethod = pobj_DBClass->GetNowCompilingMethodInfo();
 		if( isWriteAccess &&
-			pMethod->isConst &&
+			pMethod->IsConst() &&
 			pobj_CompilingClass->IsCompilingConstructor() == false &&
 			pobj_CompilingClass->IsCompilingDestructor() == false
@@ -772,5 +774,5 @@
 				i=GetOneParameter(InitBuf,i,temporary);
 
-				i3=objClass.GetMemberOffset( objClass.ppobj_Member[i2]->name, NULL );
+				i3=objClass.GetMemberOffset( objClass.ppobj_Member[i2]->GetName().c_str(), NULL );
 
 				if(!SetInitGlobalData(offset+i3,
@@ -908,5 +910,5 @@
 				i=GetOneParameter(InitBuf,i,temporary);
 
-				i3=objClass.GetMemberOffset( objClass.ppobj_Member[i2]->name, NULL );
+				i3=objClass.GetMemberOffset( objClass.ppobj_Member[i2]->GetName().c_str(), NULL );
 
 				if(!InitLocalVar(offset+i3,
Index: /BasicCompiler64/NumOpe.cpp
===================================================================
--- /BasicCompiler64/NumOpe.cpp	(revision 134)
+++ /BasicCompiler64/NumOpe.cpp	(revision 135)
@@ -166,5 +166,5 @@
 	GetVarFormatString(methodName,parameter,lpPtrOffset,dummy,refType);
 
-	objClass.EnumMethod( methodName, userProcs );
+	objClass.GetMethods().Enum( methodName, userProcs );
 	UserProc *pUserProc;
 	if(userProcs.size()){
Index: /BasicCompiler64/OperatorProc.cpp
===================================================================
--- /BasicCompiler64/OperatorProc.cpp	(revision 134)
+++ /BasicCompiler64/OperatorProc.cpp	(revision 135)
@@ -10,5 +10,5 @@
 	////////////////////////////////////////////////
 
-	CMethod *method = pobj_c->GetDestructorMethod();
+	const CMethod *method = pobj_c->GetDestructorMethod();
 	if( method ){
 		//mov rcx,reg
@@ -33,5 +33,5 @@
 
 	std::vector<UserProc *> subs;
-	pobj_c->EnumMethod( idCalc, subs );
+	pobj_c->GetMethods().Enum( idCalc, subs );
 	if( subs.size() == 0 ){
 		return 0;
@@ -320,5 +320,5 @@
 
 	std::vector<UserProc *> subs;
-	pobj_Class->EnumMethod( CALC_ARRAY_GET, subs );
+	pobj_Class->GetMethods().Enum( CALC_ARRAY_GET, subs );
 	if( subs.size() == 0 ){
 		return;
Index: /BasicCompiler_Common/Class.cpp
===================================================================
--- /BasicCompiler_Common/Class.cpp	(revision 134)
+++ /BasicCompiler_Common/Class.cpp	(revision 135)
@@ -12,141 +12,4 @@
 
 CMember *pCompilingMethod;
-
-
-
-CMember::CMember( CClass *pobj_c, DWORD access, bool isConst, bool isRef, char *buffer, int nowLine ){
-	extern int cp;
-
-						if( strstr(buffer,"environVarName")){
-							int test=0;
-						}
-
-	//構文を解析
-	char VarName[VN_SIZE];
-	char init_buf[VN_SIZE];
-	char constract_parameter[VN_SIZE];
-	GetDimentionFormat(buffer,VarName,SubScripts,*this,init_buf,constract_parameter);
-
-	//重複チェック
-	if(pobj_c->DupliCheckAll(VarName)){
-		SetError(15,VarName,cp);
-	}
-
-	//メンバ名
-	name=(char *)HeapAlloc(hHeap,0,lstrlen(VarName)+1);
-	lstrcpy(name,VarName);
-
-	//アクセス権
-	dwAccess=access;
-
-	//定数扱いかどうか
-	this->isConst = isConst;
-
-	//初期データ
-	InitBuf=(char *)HeapAlloc(hHeap,0,lstrlen(init_buf)+1);
-	lstrcpy(InitBuf,init_buf);
-
-	//コンストラクタ用のパラメータ
-	ConstractParameter=(char *)HeapAlloc(hHeap,0,lstrlen(constract_parameter)+1);
-	lstrcpy(ConstractParameter,constract_parameter);
-
-	//ソースコードの位置
-	source_code_address=nowLine;
-}
-CMember::CMember(CMember &member):
-	Type( member )
-{
-
-	//name
-	name=(char *)HeapAlloc(hHeap,0,lstrlen(member.name)+1);
-	lstrcpy(name,member.name);
-
-	//定数扱いかどうか
-	isConst = member.isConst;
-
-	//SubScripts
-	memcpy(SubScripts,member.SubScripts,MAX_ARRAYDIM*sizeof(int));
-
-	//ソースコードの位置
-	source_code_address=member.source_code_address;
-}
-CMember::CMember(){
-	memset(this,0,sizeof(CMember));
-}
-CMember::~CMember(){
-	HeapDefaultFree(name);
-	if(InitBuf) HeapDefaultFree(InitBuf);
-	if(ConstractParameter) HeapDefaultFree(ConstractParameter);
-}
-
-bool CMember::IsConst(){
-	return isConst;
-}
-
-void CMember::InitStaticMember(void){
-	//静的メンバをグローバル領域に作成
-
-	//イテレータをリセット
-	extern CDBClass *pobj_DBClass;
-	pobj_DBClass->Iterator_Reset();
-
-	int back_cp=cp;
-
-	while(pobj_DBClass->Iterator_HasNext()){
-		CClass &objClass = *pobj_DBClass->Iterator_GetNext();
-
-		// 名前空間をセット
-		Smoothie::Lexical::liveingNamespaceScopes = objClass.GetNamespaceScopes();
-
-		int i=0;
-		foreach( CMember *member, objClass.staticMembers ){
-			char temporary[VN_SIZE];
-			sprintf(temporary,"%s.%s",objClass.GetName().c_str(),member->name);
-			dim(
-				temporary,
-				member->SubScripts,
-				*member,
-				member->InitBuf,
-				member->ConstractParameter,
-				0);
-
-			//ネイティブコードバッファの再確保
-			ReallocNativeCodeBuffer();
-
-			i++;
-		}
-	}
-
-	Smoothie::Lexical::liveingNamespaceScopes.clear();
-
-	cp=back_cp;
-}
-
-
-
-//コピーコンストラクタ
-CMethod::CMethod(CMethod *pMethod)
-	: pUserProc( pMethod->pUserProc )
-	, dwAccess( pMethod->dwAccess )
-	, bAbstract( pMethod->bAbstract )
-	, bVirtual( pMethod->bVirtual )
-	, isConst( pMethod->isConst )
-	, isStatic( pMethod->isStatic )
-{
-}
-
-CMethod::CMethod( UserProc *pUserProc, DWORD dwAccess, BOOL bAbstract, BOOL bVirtual, bool isConst, bool isStatic )
-	: pUserProc( pUserProc )
-	, dwAccess( dwAccess )
-	, bAbstract( bAbstract )
-	, bVirtual( bVirtual )
-	, isConst( isConst )
-	, isStatic( isStatic )
-	, pobj_InheritsClass( NULL )
-{
-}
-CMethod::~CMethod(){
-}
-
 
 
@@ -184,14 +47,4 @@
 		delete member;
 	}
-
-	//メソッド
-	foreach( CMethod *method, methods ){
-		delete method;
-	}
-
-	//静的メソッド
-	foreach( CMethod *method, staticMethods ){
-		delete method;
-	}
 }
 
@@ -321,21 +174,22 @@
 
 	//メソッドをコピー
-	foreach( CMethod *baseMethod, inheritsClass.methods ){
-		CMethod *method = new CMethod( baseMethod );
+	foreach( const CMethod *pBaseMethod, inheritsClass.methods ){
+		CMethod *pMethod = new DynamicMethod( *pBaseMethod );
 
 		//dwAccess
-		if(baseMethod->dwAccess==ACCESS_PRIVATE)
-			method->dwAccess=ACCESS_NON;
-		else method->dwAccess=baseMethod->dwAccess;
+		if(pBaseMethod->dwAccess==ACCESS_PRIVATE)
+			pMethod->dwAccess=ACCESS_NON;
+		else pMethod->dwAccess=pBaseMethod->dwAccess;
 
 		//pobj_Inherits
 		// ※継承元のClassIndexをセット（入れ子継承を考慮する）
-		if(baseMethod->pobj_InheritsClass==0)
-			method->pobj_InheritsClass=&inheritsClass;
-		else
-			method->pobj_InheritsClass=
-				baseMethod->pobj_InheritsClass;
-
-		methods.push_back( method );
+		if(pBaseMethod->GetInheritsClassPtr()==0){
+			pMethod->SetInheritsClassPtr( &inheritsClass );
+		}
+		else{
+			pMethod->SetInheritsClassPtr( pBaseMethod->GetInheritsClassPtr() );
+		}
+
+		methods.push_back( pMethod );
 	}
 
@@ -364,21 +218,22 @@
 
 	//メソッドをコピー
-	foreach( CMethod *baseMethod, inheritsInterface.methods ){
-		CMethod *method = new CMethod( baseMethod );
+	foreach( const CMethod *pBaseMethod, inheritsInterface.methods ){
+		CMethod *pMethod = new DynamicMethod( *pBaseMethod );
 
 		//dwAccess
-		if(baseMethod->dwAccess==ACCESS_PRIVATE)
-			method->dwAccess=ACCESS_NON;
-		else method->dwAccess=baseMethod->dwAccess;
+		if(pBaseMethod->dwAccess==ACCESS_PRIVATE)
+			pMethod->dwAccess=ACCESS_NON;
+		else pMethod->dwAccess=pBaseMethod->dwAccess;
 
 		//pobj_Inherits
 		// ※継承元のClassIndexをセット（入れ子継承を考慮する）
-		if(baseMethod->pobj_InheritsClass==0)
-			method->pobj_InheritsClass=&inheritsInterface;
-		else
-			method->pobj_InheritsClass=
-				baseMethod->pobj_InheritsClass;
-
-		methods.push_back( method );
+		if(pBaseMethod->GetInheritsClassPtr()==0){
+			pMethod->SetInheritsClassPtr( &inheritsInterface );
+		}
+		else{
+			pMethod->SetInheritsClassPtr( pBaseMethod->GetInheritsClassPtr() );
+		}
+
+		methods.push_back( pMethod );
 	}
 
@@ -399,20 +254,4 @@
 	staticMembers.push_back( member );
 }
-void CClass::AddMethod( UserProc *pUserProc,DWORD dwAccess, bool isConst, BOOL bAbstract, BOOL bVirtual ){
-	CMethod *method = new CMethod( pUserProc, dwAccess, bAbstract, bVirtual, isConst, false );
-
-	methods.push_back( method );
-
-	// プロシージャオブジェクトと関連付け
-	pUserProc->SetMethod( method );
-}
-void CClass::AddStaticMethod(UserProc *pUserProc,DWORD dwAccess){
-	CMethod *method = new CMethod( pUserProc, dwAccess, FALSE, FALSE, false, true );
-
-	staticMethods.push_back( method );
-
-	// プロシージャオブジェクトと関連付け
-	pUserProc->SetMethod( method );
-}
 BOOL CClass::DupliCheckAll(const char *name){
 	//重複チェック
@@ -422,6 +261,6 @@
 
 	//メソッド
-	foreach( CMethod *method, methods ){
-		if( lstrcmp( name, method->pUserProc->GetName().c_str() ) == 0 ){
+	foreach( const CMethod *pMethod, methods ){
+		if( lstrcmp( name, pMethod->pUserProc->GetName().c_str() ) == 0 ){
 			return 1;
 		}
@@ -435,5 +274,5 @@
 	//メンバ
 	for( int i=0;i<iMemberNum;i++){
-		if( GetName() == ppobj_Member[i]->name ){
+		if( GetName() == ppobj_Member[i]->GetName() ){
 			return 1;
 		}
@@ -442,5 +281,5 @@
 	//静的メンバ
 	foreach( CMember *member, staticMembers ){
-		if( GetName() == member->name ){
+		if( GetName() == member->GetName() ){
 			return 1;
 		}
@@ -449,72 +288,7 @@
 	return 0;
 }
-CMethod *CClass::GetMethodInfo( UserProc *pUserProc ) const
-{
-	for( int i=(int)methods.size()-1; i>=0; i-- ){
-		if( pUserProc == methods[i]->pUserProc ){
-			return methods[i];
-		}
-	}
-	return NULL;
-}
-CMethod *CClass::GetStaticMethodInfo( UserProc *pUserProc ) const
-{
-	for( int i=(int)staticMethods.size()-1; i>=0; i-- ){
-		if( pUserProc == staticMethods[i]->pUserProc ) return staticMethods[i];
-	}
-	return NULL;
-}
-bool CClass::IsExistMethod( const char *name ) const
-{
-	foreach( CMethod *method, methods ){
-		if( method->pUserProc->GetName() == name ) return true;
-	}
-	return false;
-}
-bool CClass::IsExistStaticMethod( const char *name ) const
-{
-	foreach( CMethod *method, staticMethods ){
-		if( method->pUserProc->GetName() == name ) return true;
-	}
-	return false;
-}
-
-void CClass::EnumStaticMethod( const char *methodName, vector<UserProc *> &subs ) const
-{
-	foreach( CMethod *method, staticMethods ){
-		if( method->pUserProc->GetName() == methodName ){
-			subs.push_back( method->pUserProc );
-		}
-	}
-}
-
-void CClass::EnumMethod( const char *methodName, vector<UserProc *> &subs ) const
-{
-	//オブジェクトのメンバ関数の場合
-	//※オーバーライドされた関数を先にサーチする必要があるため、バックサーチを行う
-	for( int i=(int)methods.size()-1; i>=0; i-- ){
-		if( methods[i]->pUserProc->GetName() == methodName ){
-			subs.push_back( methods[i]->pUserProc );
-		}
-	}
-}
-
-void CClass::EnumMethod( const BYTE idOperatorCalc, vector<UserProc *> &subs ) const
-{
-	//オブジェクトのメンバ関数の場合
-	//※オーバーライドされた関数を先にサーチする必要があるため、バックサーチを行う
-	for( int i=(int)methods.size()-1; i>=0; i-- ){
-		UserProc *pUserProc = methods[i]->pUserProc;
-		const char *temp = pUserProc->GetName().c_str();
-		if(temp[0]==1&&temp[1]==ESC_OPERATOR){
-			if((BYTE)temp[2]==idOperatorCalc){
-				subs.push_back( pUserProc );
-			}
-		}
-	}
-}
 
 //デフォルト コンストラクタ メソッドを取得
-CMethod *CClass::GetConstructorMethod() const
+const CMethod *CClass::GetConstructorMethod() const
 {
 	if( ConstructorMemberSubIndex == -1 ) return NULL;
@@ -523,5 +297,5 @@
 
 //デストラクタ メソッドを取得
-CMethod *CClass::GetDestructorMethod() const
+const CMethod *CClass::GetDestructorMethod() const
 {
 	if( DestructorMemberSubIndex == -1 ) return NULL;
@@ -584,5 +358,5 @@
 		if(memberName){
 			//メンバ指定がある場合は、オフセットを返す
-			if(lstrcmp(pMember->name,memberName)==0){
+			if( pMember->GetName() == memberName ){
 				if(pMemberNum) *pMemberNum=i;
 				return offset;
@@ -644,7 +418,7 @@
 {
 	int n = 0;
-	foreach( CMethod *method, methods ){
-		if( method->pUserProc == pUserProc ) break;
-		if( method->bVirtual ) n++;
+	foreach( const CMethod *pMethod, methods ){
+		if( pMethod->pUserProc == pUserProc ) break;
+		if( pMethod->IsVirtual() ) n++;
 	}
 	return n;
@@ -667,9 +441,9 @@
 	//関数テーブルに値をセット
 	int i2 = 0;
-	foreach( CMethod *method, methods ){
-		if(method->bVirtual){
-			method->pUserProc->Using();
-
-			if(method->bAbstract){
+	foreach( const CMethod *pMethod, methods ){
+		if(pMethod->IsVirtual()){
+			pMethod->pUserProc->Using();
+
+			if(pMethod->IsAbstract()){
 				extern int cp;
 				SetError(300,NULL,cp);
@@ -678,5 +452,5 @@
 			}
 			else{
-				ppsi[i2]=method->pUserProc;
+				ppsi[i2]=pMethod->pUserProc;
 			}
 			i2++;
@@ -712,7 +486,7 @@
 	// 未実装(abstract)の仮想関数を持つ場合はtrueを返す
 
-	foreach( CMethod *method, methods ){
-		if(method->bVirtual){
-			if(method->bAbstract){
+	foreach( const CMethod *pMethod, methods ){
+		if(pMethod->IsVirtual()){
+			if(pMethod->IsAbstract()){
 				return true;
 			}
@@ -1063,6 +837,6 @@
 
 
-void CDBClass::AddMethod(CClass *pobj_c, DWORD dwAccess, BOOL bStatic, bool isConst, BOOL bAbstract,
-						 BOOL bVirtual, BOOL bOverride, char *buffer, int nowLine){
+void CDBClass::AddMethod(CClass *pobj_c, DWORD dwAccess, BOOL bStatic, bool isConst, bool isAbstract,
+						 bool isVirtual, bool isOverride, char *buffer, int nowLine){
 	int i,i2;
 	char temporary[VN_SIZE];
@@ -1080,5 +854,5 @@
 	//関数ハッシュへ登録
 	GlobalProc *pUserProc;
-	pUserProc=AddSubData( NamespaceScopes(), NamespaceScopesCollection(), buffer,nowLine,bVirtual,pobj_c, (bStatic!=0) );
+	pUserProc=AddSubData( NamespaceScopes(), NamespaceScopesCollection(), buffer,nowLine,isVirtual,pobj_c, (bStatic!=0) );
 	if(!pUserProc) return;
 
@@ -1129,10 +903,10 @@
 
 	//メソッド
-	foreach( CMethod *method, pobj_c->methods ){
+	foreach( const CMethod *pMethod, pobj_c->methods ){
 		//基底クラスと重複する場合はオーバーライドを行う
-		if(method->pobj_InheritsClass) continue;
-
-		if( method->pUserProc->GetName() == temporary ){
-			if( method->pUserProc->Params().Equals( pUserProc->Params() ) ){
+		if( pMethod->GetInheritsClassPtr() ) continue;
+
+		if( pMethod->pUserProc->GetName() == temporary ){
+			if( pMethod->pUserProc->Params().Equals( pUserProc->Params() ) ){
 				//関数名、パラメータ属性が合致したとき
 				SetError(15,pUserProc->GetName().c_str(),nowLine);
@@ -1143,24 +917,24 @@
 
 	//仮想関数の場合
-	if(bAbstract) pUserProc->CompleteCompile();
+	if( isAbstract ) pUserProc->CompleteCompile();
 
 	//メソッドのオーバーライド
-	foreach( CMethod *method, pobj_c->methods ){
-		if( method->pUserProc->GetName() == temporary ){
-			if( method->pUserProc->Params().Equals( pUserProc->Params() ) ){
-
-				if(method->bVirtual){
+	foreach( CMethod *pMethod, pobj_c->methods ){
+		if( pMethod->pUserProc->GetName() == temporary ){
+			if( pMethod->pUserProc->Params().Equals( pUserProc->Params() ) ){
+
+				if(pMethod->IsVirtual()){
 					//メンバ関数を上書き
-					method->pUserProc=pUserProc;
-					method->bAbstract=0;
-
-					if(!bOverride){
+					pMethod->pUserProc=pUserProc;
+					pMethod->Override();
+
+					if( !isOverride ){
 						SetError(127,NULL,nowLine);
 					}
-					if(method->dwAccess!=dwAccess){
+					if(pMethod->dwAccess!=dwAccess){
 						SetError(128,NULL,nowLine);
 					}
 
-					pUserProc->SetMethod( method );
+					pUserProc->SetMethod( pMethod );
 					return;
 				}
@@ -1169,17 +943,17 @@
 	}
 
-	if(bVirtual){
+	if( isVirtual ){
 		pobj_c->vtbl_num++;
 	}
 
-	if(bOverride){
+	if( isOverride ){
 		SetError(12,"Override",nowLine);
 	}
 
 	if(bStatic){
-		pobj_c->AddStaticMethod(pUserProc,dwAccess);
+		pobj_c->staticMethods.AddStatic(pUserProc,dwAccess);
 	}
 	else{
-		pobj_c->AddMethod(pUserProc, dwAccess, isConst, bAbstract, bVirtual);
+		pobj_c->methods.Add(pUserProc, dwAccess, isConst, isAbstract, isVirtual);
 	}
 }
@@ -1517,8 +1291,8 @@
 				else i3=0;
 
-				BOOL bVirtual=0,bAbstract=0,bOverride=0;
+				bool isVirtual = false, isAbstract = false, isOverride = false;
 				if(i3==ESC_ABSTRACT){
-					bAbstract=1;
-					bVirtual=1;
+					isAbstract=1;
+					isVirtual=1;
 					i+=2;
 
@@ -1526,6 +1300,6 @@
 				}
 				else if(i3==ESC_VIRTUAL){
-					bAbstract=0;
-					bVirtual=1;
+					isAbstract=0;
+					isVirtual=1;
 					i+=2;
 
@@ -1533,6 +1307,6 @@
 				}
 				else if(i3==ESC_OVERRIDE){
-					bOverride=1;
-					bVirtual=1;
+					isOverride=1;
+					isVirtual=1;
 
 					i+=2;
@@ -1619,11 +1393,11 @@
 						bStatic,
 						isConst,
-						bAbstract,
-						bVirtual,
-						bOverride,
+						isAbstract,
+						isVirtual,
+						isOverride,
 						temporary,
 						sub_address);
 
-					if(bAbstract) continue;
+					if( isAbstract ) continue;
 
 					for(;;i++){
@@ -1699,5 +1473,5 @@
 				sprintf( referenceOffsetsBuffer + lstrlen( referenceOffsetsBuffer ),
 					"%d",
-					objClass.GetMemberOffset( member.name ) );
+					objClass.GetMemberOffset( member.GetName().c_str() ) );
 
 				numOfReference++;
@@ -1822,7 +1596,7 @@
 		pCompilingClass->Using();
 
-		pCompilingMethod = pCompilingClass->GetMethodInfo( pUserProc );
+		pCompilingMethod = pCompilingClass->methods.GetMethodPtr( pUserProc );
 		if( !pCompilingMethod ){
-			pCompilingMethod = pCompilingClass->GetStaticMethodInfo( pUserProc );
+			pCompilingMethod = pCompilingClass->staticMethods.GetMethodPtr( pUserProc );
 			if( !pCompilingMethod ){
 				SetError(300,NULL,cp);
@@ -1838,5 +1612,5 @@
 	return pCompilingClass;
 }
-CMethod *CDBClass::GetNowCompilingMethodInfo(){
+const CMethod *CDBClass::GetNowCompilingMethodInfo(){
 	return pCompilingMethod;
 }
Index: /BasicCompiler_Common/Class.h
===================================================================
--- /BasicCompiler_Common/Class.h	(revision 134)
+++ /BasicCompiler_Common/Class.h	(revision 135)
@@ -5,8 +5,7 @@
 
 #include <Prototype.h>
-#include "Type.h"
+#include <Method.h>
+#include <Member.h>
 #include "Procedure.h"
-
-class CClass;
 
 #define ACCESS_NON			0
@@ -14,47 +13,4 @@
 #define ACCESS_PUBLIC		2
 #define ACCESS_PROTECTED	3
-
-class CMember : public Type
-{
-	bool isConst;
-public:
-	char *name;
-	int SubScripts[MAX_ARRAYDIM];
-
-	DWORD dwAccess;
-
-	char *InitBuf;
-	char *ConstractParameter;
-
-	int source_code_address;
-
-
-	CMember( CClass *pobj_c, DWORD access, bool idConst, bool isRef, char *buffer, int nowLine=-1 );
-	CMember( CMember &member );
-	CMember();
-	~CMember();
-
-	bool IsConst();
-
-
-	static void InitStaticMember(void);
-};
-class CMethod
-{
-public:
-	UserProc *pUserProc;
-
-	DWORD dwAccess;
-	BOOL bAbstract;
-	BOOL bVirtual;
-	bool isConst;
-	bool isStatic;
-
-	const CClass *pobj_InheritsClass;
-
-	CMethod(CMethod *pobj);
-	CMethod( UserProc *pUserProc, DWORD dwAccess, BOOL bAbstract, BOOL bVirtual, bool isConst, bool isStatic );
-	~CMethod();
-};
 
 class CDBClass;
@@ -100,10 +56,10 @@
 
 	//メソッド情報
-	std::vector<CMethod *> methods;
+	Methods methods;
 	int ConstructorMemberSubIndex;
 	int DestructorMemberSubIndex;
 
 	//静的メソッド情報
-	std::vector<CMethod *> staticMethods;
+	Methods staticMethods;
 
 	enum ClassType{
@@ -176,6 +132,4 @@
 	void AddMember( DWORD dwAccess, bool idConst, bool isRef, char *buffer );
 	void AddStaticMember( DWORD dwAccess, bool isConst, bool isRef, char *buffer, int nowLine );
-	void AddMethod( UserProc *pUserProc,DWORD dwAccess, bool isConst, BOOL bAbstract, BOOL bVirtual );
-	void AddStaticMethod(UserProc *pUserProc,DWORD dwAccess);
 
 	//重複チェック
@@ -183,21 +137,9 @@
 	BOOL DupliCheckMember(const char *name);
 
-	//メソッド取得
-	CMethod *GetMethodInfo( UserProc *pUserProc ) const;
-	CMethod *GetStaticMethodInfo( UserProc *pUserProc ) const;
-
-	//メソッドの存在を確認
-	bool IsExistMethod( const char *name ) const;
-	bool IsExistStaticMethod( const char *name ) const;
-
-	//メソッドを列挙
-	void EnumStaticMethod( const char *methodName, vector<UserProc *> &subs ) const;
-	void EnumMethod( const char *methodName, vector<UserProc *> &subs ) const;
-	void EnumMethod( const BYTE idOperatorCalc, vector<UserProc *> &subs ) const;
-	const std::vector<CMethod *> &GetMethods() const
+	const Methods &GetMethods() const
 	{
 		return methods;
 	}
-	const std::vector<CMethod *> &GetStaticMethods() const
+	const Methods &GetStaticMethods() const
 	{
 		return staticMethods;
@@ -205,8 +147,8 @@
 
 	//デフォルト コンストラクタ メソッドを取得
-	CMethod *GetConstructorMethod() const;
+	const CMethod *GetConstructorMethod() const;
 
 	//デストラクタ メソッドを取得
-	CMethod *GetDestructorMethod() const;
+	const CMethod *GetDestructorMethod() const;
 
 	// メンバの総合サイズを取得
@@ -288,6 +230,6 @@
 
 private:
-	void AddMethod(CClass *pobj_c, DWORD dwAccess, BOOL bStatic, bool isConst, BOOL bAbstract,
-		BOOL bVirtual, BOOL bOverride, char *buffer, int nowLine);
+	void AddMethod(CClass *pobj_c, DWORD dwAccess, BOOL bStatic, bool isConst, bool isAbstract,
+		bool isVirtual, bool isOverride, char *buffer, int nowLine);
 	BOOL MemberVar_LoopRefCheck(const CClass &objClass);
 public:
@@ -312,5 +254,5 @@
 private:
 	const CClass *pCompilingClass;
-	CMethod *pCompilingMethod;
+	const CMethod *pCompilingMethod;
 public:
 	//コンパイル開始の通知を受け取るメソッド
@@ -319,5 +261,5 @@
 	//現在コンパイル中のメソッド情報を取得
 	const CClass *GetNowCompilingClass() const;
-	CMethod *GetNowCompilingMethodInfo();
+	const CMethod *GetNowCompilingMethodInfo();
 
 
Index: /BasicCompiler_Common/DebugMiddleFile.cpp
===================================================================
--- /BasicCompiler_Common/DebugMiddleFile.cpp	(revision 134)
+++ /BasicCompiler_Common/DebugMiddleFile.cpp	(revision 135)
@@ -327,5 +327,5 @@
 		i2+=sizeof(long);
 		for(i4=0;i4<pobj_c->iMemberNum;i4++){
-			lstrcpy(buffer+i2,pobj_c->ppobj_Member[i4]->name);
+			lstrcpy(buffer+i2,pobj_c->ppobj_Member[i4]->GetName().c_str());
 			i2+=lstrlen(buffer+i2)+1;
 
@@ -353,9 +353,9 @@
 		*(long *)(buffer+i2)=(long)pobj_c->methods.size();
 		i2+=sizeof(long);
-		foreach( CMethod *method, pobj_c->methods ){
-			*(long *)(buffer+i2)=method->dwAccess;
-			i2+=sizeof(long);
-			if(method->pobj_InheritsClass){
-				lstrcpy(buffer+i2,method->pobj_InheritsClass->GetName().c_str());
+		foreach( const CMethod *pMethod, pobj_c->methods ){
+			*(long *)(buffer+i2)=pMethod->dwAccess;
+			i2+=sizeof(long);
+			if( pMethod->GetInheritsClassPtr() ){
+				lstrcpy(buffer+i2,pMethod->GetInheritsClassPtr()->GetName().c_str());
 				i2+=lstrlen(buffer+i2)+1;
 			}
@@ -364,5 +364,5 @@
 				i2+=lstrlen(buffer+i2)+1;
 			}
-			lstrcpy(buffer+i2,method->pUserProc->GetName().c_str());
+			lstrcpy(buffer+i2,pMethod->pUserProc->GetName().c_str());
 			i2+=lstrlen(buffer+i2)+1;
 		}
@@ -372,5 +372,5 @@
 		i2+=sizeof(long);
 		foreach( CMember *member, pobj_c->staticMembers ){
-			lstrcpy(buffer+i2,member->name);
+			lstrcpy(buffer+i2,member->GetName().c_str());
 			i2+=lstrlen(buffer+i2)+1;
 
@@ -709,6 +709,5 @@
 			pobj_c->ppobj_Member[i4]=new CMember();
 
-			pobj_c->ppobj_Member[i4]->name=(char *)HeapAlloc(hHeap,0,lstrlen(buffer+i2)+1);
-			lstrcpy(pobj_c->ppobj_Member[i4]->name,buffer+i2);
+			pobj_c->ppobj_Member[i4]->SetName( (char *)(buffer+i2) );
 			i2+=lstrlen(buffer+i2)+1;
 
@@ -759,8 +758,7 @@
 			}
 
-			CMethod *method = new CMethod( pUserProc, dwAccess, 0,0,false, false);
-			method->pobj_InheritsClass = pobj_InheritsClass;
-
-			pobj_c->methods.push_back( method );
+			CMethod *pMethod = new DynamicMethod( pUserProc, dwAccess, 0,0,false, pobj_InheritsClass);
+
+			pobj_c->methods.push_back( pMethod );
 		}
 
@@ -771,6 +769,5 @@
 			CMember *member=new CMember();
 
-			member->name=(char *)HeapAlloc(hHeap,0,lstrlen(buffer+i2)+1);
-			lstrcpy(member->name,buffer+i2);
+			member->SetName( (char *)(buffer+i2) );
 			i2+=lstrlen(buffer+i2)+1;
 
Index: /BasicCompiler_Common/Diagnose.cpp
===================================================================
--- /BasicCompiler_Common/Diagnose.cpp	(revision 134)
+++ /BasicCompiler_Common/Diagnose.cpp	(revision 135)
@@ -77,13 +77,13 @@
 
 			// 動的メソッド
-			foreach( const CMethod &method, objClass.GetMethods() ){
-				if( method.pUserProc->IsCompiled() ){
-					codeSizeOfClass += method.pUserProc->GetCodeSize();
+			foreach( const CMethod *pMethod, objClass.GetMethods() ){
+				if( pMethod->pUserProc->IsCompiled() ){
+					codeSizeOfClass += pMethod->pUserProc->GetCodeSize();
 				}
 			}
 
 			// 静的メソッド
-			foreach( const CMethod &method, objClass.GetStaticMethods() ){
-					codeSizeOfClass += method.pUserProc->GetCodeSize();
+			foreach( const CMethod *pMethod, objClass.GetStaticMethods() ){
+					codeSizeOfClass += pMethod->pUserProc->GetCodeSize();
 			}
 
@@ -112,13 +112,13 @@
 
 			// 動的メソッド
-			foreach( const CMethod &method, objClass.GetMethods() ){
-				if( method.pUserProc->IsCompiled() ){
-					codeSizeOfClass += method.pUserProc->GetCodeSize();
+			foreach( const CMethod *pMethod, objClass.GetMethods() ){
+				if( pMethod->pUserProc->IsCompiled() ){
+					codeSizeOfClass += pMethod->pUserProc->GetCodeSize();
 				}
 			}
 
 			// 静的メソッド
-			foreach( const CMethod &method, objClass.GetStaticMethods() ){
-					codeSizeOfClass += method.pUserProc->GetCodeSize();
+			foreach( const CMethod *pMethod, objClass.GetStaticMethods() ){
+					codeSizeOfClass += pMethod->pUserProc->GetCodeSize();
 			}
 
Index: /BasicCompiler_Common/LexicalScoping.cpp
===================================================================
--- /BasicCompiler_Common/LexicalScoping.cpp	(revision 134)
+++ /BasicCompiler_Common/LexicalScoping.cpp	(revision 135)
@@ -214,5 +214,5 @@
 	if(indexSystemGC!=-1){
 		//_System_GCオブジェクトのデストラクタの呼び出し処理
-		CMethod *method = vars[indexSystemGC]->GetClass().GetDestructorMethod();
+		const CMethod *method = vars[indexSystemGC]->GetClass().GetDestructorMethod();
 		if( method ){
 			Opcode_CallProc("",method->pUserProc,0,vars[indexSystemGC]->GetName().c_str(),DEF_OBJECT);
Index: /BasicCompiler_Common/NumOpe_GetType.cpp
===================================================================
--- /BasicCompiler_Common/NumOpe_GetType.cpp	(revision 134)
+++ /BasicCompiler_Common/NumOpe_GetType.cpp	(revision 135)
@@ -194,5 +194,5 @@
 
 	std::vector<UserProc *> subs;
-	pobj_c->EnumMethod( idCalc, subs );
+	pobj_c->GetMethods().Enum( idCalc, subs );
 	if( subs.size() == 0 ){
 		return 0;
@@ -372,5 +372,5 @@
 		GetVarFormatString(methodName,parameter,lpPtrOffset,member,refType);
 
-		objClass.EnumMethod( methodName, userProcs );
+		objClass.GetMethods().Enum( methodName, userProcs );
 		UserProc *pUserProc;
 		if(userProcs.size()){
Index: /BasicCompiler_Common/Procedure.cpp
===================================================================
--- /BasicCompiler_Common/Procedure.cpp	(revision 134)
+++ /BasicCompiler_Common/Procedure.cpp	(revision 135)
@@ -382,5 +382,5 @@
 		return false;
 	}
-	return ( pMethod->bVirtual != 0 );
+	return ( pMethod->IsVirtual() != 0 );
 }
 const NamespaceScopes &UserProc::GetNamespaceScopes() const
Index: /BasicCompiler_Common/Subroutine.cpp
===================================================================
--- /BasicCompiler_Common/Subroutine.cpp	(revision 134)
+++ /BasicCompiler_Common/Subroutine.cpp	(revision 135)
@@ -300,5 +300,5 @@
 bool GetReturnTypeOfIndexerGetterProc( const CClass &objClass, Type &resultType ){
 	vector<UserProc *> subs;
-	objClass.EnumMethod( CALC_ARRAY_GET, subs );
+	objClass.GetMethods().Enum( CALC_ARRAY_GET, subs );
 	if( subs.size() == 0 ){
 		return false;
@@ -462,5 +462,5 @@
 }
 
-GlobalProc *AddSubData( const NamespaceScopes &namespaceScopes, const NamespaceScopesCollection &importedNamespaces, char *buffer,int nowLine,BOOL bVirtual,CClass *pobj_c, bool isStatic){
+GlobalProc *AddSubData( const NamespaceScopes &namespaceScopes, const NamespaceScopesCollection &importedNamespaces, char *buffer,int nowLine,bool isVirtual,CClass *pobj_c, bool isStatic){
 	int i2,i3;
 	char temporary[8192];
Index: /BasicCompiler_Common/VarList.cpp
===================================================================
--- /BasicCompiler_Common/VarList.cpp	(revision 134)
+++ /BasicCompiler_Common/VarList.cpp	(revision 135)
@@ -168,14 +168,14 @@
 		if(bPtr){
 			lstrcpy(VarName,"->");
-			lstrcat(VarName,objClass.ppobj_Member[i]->name);
+			lstrcat(VarName,objClass.ppobj_Member[i]->GetName().c_str());
 		}
 		else{
 			lstrcpy(VarName,".");
-			lstrcat(VarName,objClass.ppobj_Member[i]->name);
+			lstrcat(VarName,objClass.ppobj_Member[i]->GetName().c_str());
 		}
 
 		LONG_PTR offset;
 		int i2;
-		offset=objClass.GetMemberOffset( objClass.ppobj_Member[i]->name, &i2 );
+		offset=objClass.GetMemberOffset( objClass.ppobj_Member[i]->GetName().c_str(), &i2 );
 
 		if(objClass.ppobj_Member[i]->SubScripts[0]!=-1){
@@ -423,10 +423,10 @@
 
 	for(i=0;i<pUserProc->GetParentClassPtr()->iMemberNum;i++){
-		offset=pUserProc->GetParentClassPtr()->GetMemberOffset( pUserProc->GetParentClassPtr()->ppobj_Member[i]->name,&i2);
+		offset=pUserProc->GetParentClassPtr()->GetMemberOffset( pUserProc->GetParentClassPtr()->ppobj_Member[i]->GetName().c_str(),&i2);
 
 		if(pUserProc->GetParentClassPtr()->ppobj_Member[i]->SubScripts[0]!=-1){
 			//配列
 			sprintf(temporary,"%s %s(&H%X)",
-				pUserProc->GetParentClassPtr()->ppobj_Member[i]->name,
+				pUserProc->GetParentClassPtr()->ppobj_Member[i]->GetName().c_str(),
 				STRING_ARRAY,
 				(ULONG_PTR)offset);
@@ -442,5 +442,5 @@
 		else{
 			VarList_Insert(hVarTree_This,&tv,
-				pUserProc->GetParentClassPtr()->ppobj_Member[i]->name,
+				pUserProc->GetParentClassPtr()->ppobj_Member[i]->GetName().c_str(),
 				*pUserProc->GetParentClassPtr()->ppobj_Member[i],
 				pThis+offset);
Index: /BasicCompiler_Common/VariableOpe.cpp
===================================================================
--- /BasicCompiler_Common/VariableOpe.cpp	(revision 134)
+++ /BasicCompiler_Common/VariableOpe.cpp	(revision 135)
@@ -559,5 +559,7 @@
 
 	for(i=0;i<objClass.iMemberNum;i++){
-		if(lstrcmp(objClass.ppobj_Member[i]->name,VarName)==0) break;
+		if( objClass.ppobj_Member[i]->GetName() == VarName ){
+			break;
+		}
 	}
 	if(i==objClass.iMemberNum){
@@ -692,5 +694,7 @@
 
 			for(i=0;i<pobj_CompilingClass->iMemberNum;i++){
-				if(lstrcmp(VarName,pobj_CompilingClass->ppobj_Member[i]->name)==0) break;
+				if( pobj_CompilingClass->ppobj_Member[i]->GetName() == VarName ){
+					break;
+				}
 			}
 			if(i==pobj_CompilingClass->iMemberNum) goto NonClassMember;
@@ -1136,5 +1140,5 @@
 	if( type.IsObject() ){
 		//デストラクタの利用フラグをオンにする
-		CMethod *method = type.GetClass().GetDestructorMethod();
+		const CMethod *method = type.GetClass().GetDestructorMethod();
 		if( method ){
 			method->pUserProc->Using();
Index: /BasicCompiler_Common/WatchList.cpp
===================================================================
--- /BasicCompiler_Common/WatchList.cpp	(revision 134)
+++ /BasicCompiler_Common/WatchList.cpp	(revision 135)
@@ -380,5 +380,7 @@
 
 			for(i=0;i<pobj_CompilingClass->iMemberNum;i++){
-				if(lstrcmp(VarName,pobj_CompilingClass->ppobj_Member[i]->name)==0) break;
+				if( pobj_CompilingClass->ppobj_Member[i]->GetName() == VarName ){
+					break;
+				}
 			}
 			if(i==pobj_CompilingClass->iMemberNum) goto NonClassMember;
Index: /BasicCompiler_Common/common.h
===================================================================
--- /BasicCompiler_Common/common.h	(revision 134)
+++ /BasicCompiler_Common/common.h	(revision 135)
@@ -430,5 +430,4 @@
 BOOL GetConstCalcBuffer(const char *name,const char *Parameter,char *pCalcBuffer);
 DWORD GetConstValue(char *name,double *dbl,char *buffer,LONG_PTR *plpIndex);
-bool IsStringObjectType(const Type &TypeInfo);
 int IsStrCalculation(char *Command);
 BYTE GetCalcId(const char *Command,int *pi);
@@ -452,5 +451,5 @@
 bool GetReturnTypeOfPropertyMethod( const char *variable, const char *rightSide, Type &resultType );
 bool GetReturnTypeOfIndexerGetterProc( const CClass &objClass, Type &resultType );
-GlobalProc *AddSubData( const NamespaceScopes &namespaceScopes, const NamespaceScopesCollection &importedNamespaces, char *buffer,int nowLine,BOOL bVirtual,CClass *pobj_c, bool isStatic = false );
+GlobalProc *AddSubData( const NamespaceScopes &namespaceScopes, const NamespaceScopesCollection &importedNamespaces, char *buffer,int nowLine,bool isVirtual,CClass *pobj_c, bool isStatic = false );
 void GetSubInfo(void);
 void DeleteSubInfo(GlobalProc **ppSubHash,char **ppMacroNames,int MacroNum);
Index: /BasicCompiler_Common/hash.cpp
===================================================================
--- /BasicCompiler_Common/hash.cpp	(revision 134)
+++ /BasicCompiler_Common/hash.cpp	(revision 135)
@@ -99,9 +99,9 @@
 			if( isStatic ){
 				// 静的メソッドから列挙
-				pobj_c->EnumStaticMethod( NestMember, subs );
+				pobj_c->GetStaticMethods().EnumStatic( NestMember, subs );
 			}
 			else{
 				//動的メソッドから列挙
-				pobj_c->EnumMethod( NestMember, subs );
+				pobj_c->GetMethods().Enum( NestMember, subs );
 			}
 			return;
@@ -114,8 +114,8 @@
 
 		// 静的メソッド
-		pobj_CompilingClass->EnumStaticMethod( name, subs );
+		pobj_CompilingClass->GetStaticMethods().EnumStatic( name, subs );
 
 		// 動的メソッド
-		pobj_CompilingClass->EnumMethod( name, subs );
+		pobj_CompilingClass->GetMethods().Enum( name, subs );
 	}
 
@@ -190,5 +190,5 @@
 	if( pClass ){
 		vector<UserProc *> userProcs;
-		pClass->EnumMethod( methodName, userProcs );
+		pClass->GetMethods().Enum( methodName, userProcs );
 		if( userProcs.size() == 1 ){
 			return userProcs[0];
Index: /BasicCompiler_Common/include/Prototype.h
===================================================================
--- /BasicCompiler_Common/include/Prototype.h	(revision 134)
+++ /BasicCompiler_Common/include/Prototype.h	(revision 135)
@@ -7,4 +7,7 @@
 
 using namespace std;
+
+class CMethod;
+class UserProc;
 
 class Prototype
@@ -52,5 +55,5 @@
 	// シンボル比較
 	bool IsEqualSymbol( const NamespaceScopes &namespaceScopes, const string &name ) const;
-	bool IsEqualSymbol( const Prototype &objClass ) const;
+	bool IsEqualSymbol( const Prototype &prototype ) const;
 	bool IsEqualSymbol( const string &name ) const;
 
