Index: /trunk/Include/Classes/System/Collections/Generic/List.ab
===================================================================
--- /trunk/Include/Classes/System/Collections/Generic/List.ab	(revision 351)
+++ /trunk/Include/Classes/System/Collections/Generic/List.ab	(revision 352)
@@ -109,9 +109,20 @@
 			Return False
 		End If
+
+		RemoveAt( index )
+		Return True
+	End Function
+
+	/*!
+	@brief	List内の指定したインデックスの要素を削除する
+	@author	Daisuke Yamamoto
+	@date	2007/10/03
+	@return	値が削除されたときはTrue、されなかったときはFlaseが返る
+	*/
+	Sub RemoveAt( index As Long )
 		memmove( items + index*SizeOf(VoidPtr), items + (index+1)*SizeOf(VoidPtr), (size-(index+1))*SizeOf(VoidPtr) )
 		Realloc( size - 1 )
 		size--
-		Return True
-	End Function
+	End Sub
 End Class
 
Index: /trunk/Include/Classes/System/Delegate.ab
===================================================================
--- /trunk/Include/Classes/System/Delegate.ab	(revision 351)
+++ /trunk/Include/Classes/System/Delegate.ab	(revision 352)
@@ -18,4 +18,8 @@
 		This.methodPtr = methodPtr
 	End Sub
+
+	Function IsEqual( sd As _SimpleDelegate ) As Boolean
+		Return ( This.hasThisPtr = sd.hasThisPtr and ObjPtr(This.object) = ObjPtr(sd.object) and This.methodPtr = sd.methodPtr )
+	End Function
 End Class
 
@@ -28,4 +32,20 @@
 		For i=0 To ELM(dg.simpleDelegates.Count)
 			simpleDelegates.Add( dg.simpleDelegates[i] )
+		Next
+	End Sub
+
+	Sub _Delete( dg As DelegateBase )
+		Dim i As Long
+		For i=0 To ELM(This.simpleDelegates.Count)
+			Dim i2 As Long
+			Dim isExist = False
+			For i2=0 To ELM(dg.simpleDelegates.Count)
+				If This.simpleDelegates[i].IsEqual( dg.simpleDelegates[i2] ) Then
+					isExist = True
+				End If
+			Next
+			If isExist Then
+				This.simpleDelegates.RemoveAt( i )
+			End If
 		Next
 	End Sub
Index: /trunk/TestCase/SimpleTestCase/DelegateTest.ab
===================================================================
--- /trunk/TestCase/SimpleTestCase/DelegateTest.ab	(revision 351)
+++ /trunk/TestCase/SimpleTestCase/DelegateTest.ab	(revision 352)
@@ -15,4 +15,5 @@
 	proc5Flag As Boolean
 	proc6Flag As Boolean
+	proc8Flag As Boolean
 
 	Static staticProc1Flag = False As Boolean
@@ -30,7 +31,8 @@
 		proc5Flag = False
 		proc6Flag = False
+		proc8Flag = True
 	End Sub
 	Function CheckFlags() As Boolean
-		Return proc1Flag and proc2Flag and proc3Flag and proc4Flag and proc5Flag and proc6Flag
+		Return proc1Flag and proc2Flag and proc3Flag and proc4Flag and proc5Flag and proc6Flag and proc8Flag
 	End Function
 
@@ -62,4 +64,8 @@
 		Return "Proc7 result[" + str + "]"
 	End Function
+
+	Sub Proc8( a As String )
+		proc8Flag = False
+	End Sub
 End Class
 
@@ -72,4 +78,6 @@
 	dg4 += AddressOf(testObj.Proc5)
 	dg4 += AddressOf(testObj.Proc6)
+	dg4 += AddressOf(testObj.Proc8)
+	dg4 -= AddressOf(testObj.Proc8)
 
 	dg1()
Index: /trunk/TestCase/SimpleTestCase/SimpleTestCase.idx
===================================================================
--- /trunk/TestCase/SimpleTestCase/SimpleTestCase.idx	(revision 351)
+++ /trunk/TestCase/SimpleTestCase/SimpleTestCase.idx	(revision 352)
@@ -26,6 +26,2 @@
 #include "DelegateTest.ab"
 _ClearNamespaceImported
-
-'リソースファイル
-#include "resource.ab"
-#resource "SimpleTestCase.rc"
Index: /trunk/TestCase/SimpleTestCase/SimpleTestCase.pj
===================================================================
--- /trunk/TestCase/SimpleTestCase/SimpleTestCase.pj	(revision 351)
+++ /trunk/TestCase/SimpleTestCase/SimpleTestCase.pj	(revision 352)
@@ -7,5 +7,5 @@
 #NAME=SimpleTestCase
 
-#PLATFORM=32
+#PLATFORM=64
 
 #USEWINDOW=0
@@ -23,5 +23,5 @@
 #DEBUG_EXE_PATH=
 
-#RESOURCE=SimpleTestCase.rc
+#RESOURCE=0
 
 #SOURCE
Index: /trunk/bin/SubOperation/templates/delegate_class.tab
===================================================================
--- /trunk/bin/SubOperation/templates/delegate_class.tab	(revision 351)
+++ /trunk/bin/SubOperation/templates/delegate_class.tab	(revision 352)
@@ -7,5 +7,5 @@
 		End Sub
 		Sub #name#( dg As #name# )
-			Add( dg )
+			_Add( dg )
 		End Sub
 
@@ -24,11 +24,13 @@
 		#call_method_end#
 
-		Sub Add( dg As #name# )
-			_Add( dg )
-		End Sub
-
 		Function Operator+ ( dg As #name# ) As #name#
 			Dim result = New #name#( This )
 			result._Add( dg )
+			Return result
+		End Function
+
+		Function Operator- ( dg As #name# ) As #name#
+			Dim result = New #name#( This )
+			result._Delete( dg )
 			Return result
 		End Function
