File tree Expand file tree Collapse file tree 13 files changed +247
-0
lines changed
system.activation.createinstance~~1/fs
system.activator.createinstance/fs
VS_Snippets_CLR/ActivatorX/fs Expand file tree Collapse file tree 13 files changed +247
-0
lines changed Original file line number Diff line number Diff line change 1+ module ActivatorX
2+
3+ //<snippet1>
4+ open System
5+ open System.Reflection
6+ open System.Text
7+
8+ type SomeType () =
9+ member _.DoSomething ( x ) = printfn $" 100 / {x} = {100 / x}"
10+
11+ //<snippet2>
12+ // Create an instance of the StringBuilder type using Activator.CreateInstance.
13+ let o = Activator.CreateInstance typeof< StringBuilder>
14+
15+ // Append a string into the StringBuilder object and display the StringBuilder.
16+ let sb = o :?> StringBuilder
17+ sb.Append " Hello, there." |> ignore
18+ printfn $" {sb}"
19+ //</snippet2>
20+
21+ //<snippet3>
22+ // Create an instance of the SomeType class that is defined in this assembly.
23+ let oh =
24+ Activator.CreateInstanceFrom( Assembly.GetEntryAssembly() .Location, typeof< SomeType>. FullName)
25+
26+ // Call an instance method defined by the SomeType type using this object.
27+ let st = oh.Unwrap() :?> SomeType
28+
29+ st.DoSomething 5
30+ //</snippet3>
31+
32+ (* This code produces the following output:
33+
34+ Hello, there.
35+ 100 / 5 = 20
36+ *)
37+ //</snippet1>
Original file line number Diff line number Diff line change 1+ <Project Sdk =" Microsoft.NET.Sdk" >
2+
3+ <PropertyGroup >
4+ <OutputType >Exe</OutputType >
5+ <TargetFramework >net6.0</TargetFramework >
6+ </PropertyGroup >
7+
8+ <ItemGroup >
9+ <Compile Include =" ActivatorX.fs" />
10+ <Compile Include =" source2.fs" />
11+ </ItemGroup >
12+
13+ </Project >
Original file line number Diff line number Diff line change 1+ module source2
2+
3+ //<snippet4>
4+ open System
5+
6+ let instanceSpec =
7+ " System.EventArgs;System.Random;System.Exception;System.Object;System.Version"
8+
9+ let instances = instanceSpec.Split ';'
10+ let instlist = Array.zeroCreate instances.Length
11+ let mutable item = obj ()
12+
13+ for i = 0 to instances.Length - 1 do
14+ // create the object from the specification string
15+ printfn $" Creating instance of: {instances.[i]}"
16+ item <- Activator.CreateInstance( Type.GetType instances.[ i])
17+ instlist.[ i] <- item
18+
19+ printfn " \n Objects and their default values:\n "
20+
21+ for o in instlist do
22+ printfn $" Type: {o.GetType().FullName}\n Value: {o}\n HashCode: {o.GetHashCode()}\n "
23+
24+
25+ // This program will display output similar to the following:
26+ //
27+ // Creating instance of: System.EventArgs
28+ // Creating instance of: System.Random
29+ // Creating instance of: System.Exception
30+ // Creating instance of: System.Object
31+ // Creating instance of: System.Version
32+ //
33+ // Objects and their default values:
34+ //
35+ // Type: System.EventArgs
36+ // Value: System.EventArgs
37+ // HashCode: 46104728
38+ //
39+ // Type: System.Random
40+ // Value: System.Random
41+ // HashCode: 12289376
42+ //
43+ // Type: System.Exception
44+ // Value: System.Exception: Exception of type 'System.Exception' was thrown.
45+ // HashCode: 55530882
46+ //
47+ // Type: System.Object
48+ // Value: System.Object
49+ // HashCode: 30015890
50+ //
51+ // Type: System.Version
52+ // Value: 0.0
53+ // HashCode: 1048575
54+ //</snippet4>
Original file line number Diff line number Diff line change 1+ module remarks
2+
3+ // <Snippet1>
4+ let factory < 'T when 'T : ( new : unit -> 'T )> =
5+ new 'T()
6+ // </Snippet1>
Original file line number Diff line number Diff line change 1+ <Project Sdk =" Microsoft.NET.Sdk" >
2+
3+ <PropertyGroup >
4+ <OutputType >Library</OutputType >
5+ <TargetFramework >net6.0</TargetFramework >
6+ </PropertyGroup >
7+
8+ <ItemGroup >
9+ <Compile Include =" remarks.fs" />
10+ </ItemGroup >
11+
12+ </Project >
Original file line number Diff line number Diff line change 1+ module CreateInstance5
2+ // <Snippet5>
3+ open System
4+
5+ // Initialize array of characters from a to z.
6+ let chars = [| 'a' .. 'z' |]
7+
8+ let obj = Activator.CreateInstance( typeof< string>, chars[ 13 .. 22 ])
9+
10+ printfn $" {obj}"
11+
12+ // The example displays the following output:
13+ // nopqrstuvw
14+ // </Snippet5>
Original file line number Diff line number Diff line change 1+ <Project Sdk =" Microsoft.NET.Sdk" >
2+
3+ <PropertyGroup >
4+ <OutputType >Library</OutputType >
5+ <TargetFramework >net6.0</TargetFramework >
6+ </PropertyGroup >
7+
8+ <ItemGroup >
9+ <Compile Include =" ..\personinfo.fs" />
10+ </ItemGroup >
11+
12+ </Project >
Original file line number Diff line number Diff line change 1+ <Project Sdk =" Microsoft.NET.Sdk" >
2+
3+ <PropertyGroup >
4+ <OutputType >Exe</OutputType >
5+ <TargetFramework >net6.0</TargetFramework >
6+ </PropertyGroup >
7+
8+ <ItemGroup >
9+ <Compile Include =" createinstanceex1.fs" />
10+ <Compile Include =" createinstanceex1a.fs" />
11+ <Compile Include =" createinstance2.fs" />
12+ <Compile Include =" CreateInstance5.fs" />
13+ </ItemGroup >
14+
15+ <ItemGroup >
16+ <ProjectReference Include =" PersonInfo\PersonInfo.fsproj" />
17+ </ItemGroup >
18+
19+
20+ </Project >
Original file line number Diff line number Diff line change 1+ module createinstanceex2
2+ // <Snippet4>
3+ open System
4+
5+ let chars = [| 'a' .. 'f' |]
6+
7+ let arguments =
8+ [| chars
9+ chars[ 1 .. 4 ]
10+ Array.create 20 chars[ 1 ] |]
11+
12+ for args in arguments do
13+ let result =
14+ Activator.CreateInstance( typeof< string>, args)
15+
16+ printfn $" {result.GetType().Name}: {result}"
17+
18+ // The example displays the following output:
19+ // String: abcdef
20+ // String: bcde
21+ // String: bbbbbbbbbbbbbbbbbbbb
22+ // </Snippet4>
Original file line number Diff line number Diff line change 1+ module createinstanceex1
2+
3+ // <Snippet2>
4+ open System
5+
6+ let handle = Activator.CreateInstance( " PersonInfo" , " Person" )
7+ let p = handle.Unwrap() :?> Person
8+ p.Name <- " Samuel"
9+ printfn $" {p}"
10+
11+ // The example displays the following output:
12+ // Samuel
13+ // </Snippet2>
You can’t perform that action at this time.
0 commit comments