Commit f3abb95c authored by Uwe Wienkop's avatar Uwe Wienkop
Browse files

Di, 11.12.2018

parent b3c70c0d
......@@ -6,31 +6,104 @@ using System.Threading.Tasks;
namespace _09Call_by_Ref
{
class Person
{
string name, vorname;
public Person(string Name, string Vorname)
{
name = Name;
vorname = Vorname;
}
public override string ToString()
{
return $"{name}, {vorname}";
}
}
class Program
{
// Call-by-value:
// Es wird lediglich der Wert einer Variablen übergeben
// Keine Möglichkeit, den Wert in der aufrufenden Funktion
// zu verändern
static int Plus1(int x)
static void Plus1_ByVal(int x)
{
x = x + 1;
return x;
}
static int Plus1_byRef(ref int k)
static void Plus1_byRef(ref int k)
{
k = k + 1;
return k;
}
static void Plus1_Feld_byVal(int[] f)
{
f = new int[3];
for (int i = 0; i < f.Length; i++)
f[i]++;
}
static void Plus1_Feld_byRef(ref int[] f)
{
f = new int[3];
for (int i = 0; i < f.Length; i++)
f[i]++;
}
static void TueKaumEtwas_ByVal(Person p)
{
p = new Person("Müller", "Berta");
}
static void TueKaumEtwas_ByRef(ref Person p)
{
p = new Person("Müller", "Berta");
}
static void Main(string[] args)
{
#region Wert- vs. Referenzübergabe einer einfachen int-Var.
int x = 10;
x=Plus1(10);
Plus1_ByVal(10);
Console.WriteLine($"By-value: {x}");
// Zusammenfassung:
// Wertübergabe übergibt lediglich eine KOPIE des
// Werts der Variablen. Dieser kann in der aufgerufenen
// Funktion verändert werden. Diese Änderung wirkt sich
// aber nicht auf die Variable in der aufrufenden
// Funktion aus.
Plus1_byRef(ref x);
Console.WriteLine($"By-reference: {x}");
// Referenzübergabe übergibt die Speicherzelle, in der
// sich der Wert befindet. Wenn der Wert in dieser Speicher-
// zelle verändert wird, ist diese Änderung natürlich
// auch in der aufrufenden Funktion sichtbar.
#endregion
#region Wert- vs. Referenzübergabe eines Feldes
int[] m = new int[5];
Plus1_Feld_byVal(m);
for (int i = 0; i < m.Length; i++)
Console.Write(m[i]+" ");
Console.WriteLine();
// Es wird eine KOPIE der Feldadresse übergeben. Wird
// diese in der aufgerufenen Funktion verändert, hat
// das wiederum keine Auswirkung auf die Feldadresse
// in main().
Plus1_Feld_byRef(ref m);
for (int i = 0; i < m.Length; i++)
Console.Write(m[i] + " ");
Console.WriteLine();
// Es wird angegeben, wo die Feldadresse in Main()
// ausgetauscht werden kann und dieser Austausch
// kann in der aufgerufenen Funktion durchgeführt werden
#endregion
#region Wert- vs. Referenzübergabe eines Objekts
Person anton = new Person("Meier", "Anton");
TueKaumEtwas_ByVal(anton);
Console.WriteLine(anton);
TueKaumEtwas_ByRef(ref anton);
Console.WriteLine(anton);
#endregion
}
}
}
......@@ -81,6 +81,12 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "09Call-by-Ref", "09Call-by-
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "10Klimaerwaermung", "..\11Klimaerwaermung\10Klimaerwaermung.csproj", "{E5A64563-1C88-4C05-9298-AE03A93D1E49}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "10RefVsOut", "..\10RefVsOut\10RefVsOut.csproj", "{FA5296A6-0BCF-4E79-98F2-5BEB7B6FD6AD}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "10TextdateienIntro", "..\10TextdateienIntro\10TextdateienIntro.csproj", "{AAD9F324-97FA-4F53-A9F0-E6FC18E4A7C6}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "10Enum", "..\10Enum\10Enum.csproj", "{3169034F-9F35-43C3-B6B4-BF410E1E0EFA}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
......@@ -243,6 +249,18 @@ Global
{E5A64563-1C88-4C05-9298-AE03A93D1E49}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E5A64563-1C88-4C05-9298-AE03A93D1E49}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E5A64563-1C88-4C05-9298-AE03A93D1E49}.Release|Any CPU.Build.0 = Release|Any CPU
{FA5296A6-0BCF-4E79-98F2-5BEB7B6FD6AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FA5296A6-0BCF-4E79-98F2-5BEB7B6FD6AD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FA5296A6-0BCF-4E79-98F2-5BEB7B6FD6AD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FA5296A6-0BCF-4E79-98F2-5BEB7B6FD6AD}.Release|Any CPU.Build.0 = Release|Any CPU
{AAD9F324-97FA-4F53-A9F0-E6FC18E4A7C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{AAD9F324-97FA-4F53-A9F0-E6FC18E4A7C6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AAD9F324-97FA-4F53-A9F0-E6FC18E4A7C6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AAD9F324-97FA-4F53-A9F0-E6FC18E4A7C6}.Release|Any CPU.Build.0 = Release|Any CPU
{3169034F-9F35-43C3-B6B4-BF410E1E0EFA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3169034F-9F35-43C3-B6B4-BF410E1E0EFA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3169034F-9F35-43C3-B6B4-BF410E1E0EFA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3169034F-9F35-43C3-B6B4-BF410E1E0EFA}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
......
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{3169034F-9F35-43C3-B6B4-BF410E1E0EFA}</ProjectGuid>
<OutputType>Exe</OutputType>
<RootNamespace>_10Enum</RootNamespace>
<AssemblyName>10Enum</AssemblyName>
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
</startup>
</configuration>
\ No newline at end of file
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _10Enum
{
class BaseStream
{
public enum SeekOrigin { Begin, Current, End }
int aktPosition = 0;
public void Seek(int Offset, SeekOrigin Startpunkt)
{
const int Dateilaenge = 4711;
if (Startpunkt == SeekOrigin.Begin)
aktPosition = Offset;
else if (Startpunkt == SeekOrigin.End)
aktPosition = Dateilaenge + Offset;
else if (Startpunkt == SeekOrigin.Current)
aktPosition += Offset;
else
throw new ArgumentOutOfRangeException("Keiner der zulaessigen Aufzaehlwerte");
}
public void Seek2(int Offset, SeekOrigin Startpunkt)
{
const int Dateilaenge = 4711;
switch (Startpunkt)
{
case SeekOrigin.Begin:
aktPosition = Offset;
break;
case SeekOrigin.End:
aktPosition = Dateilaenge + Offset;
break;
case SeekOrigin.Current:
aktPosition += Offset;
break;
default:
throw new ArgumentOutOfRangeException("Keiner der zulaessigen Aufzaehlwerte");
}
}
class Program
{
static void Main(string[] args)
{
BaseStream bs = new BaseStream();
bs.Seek(100, SeekOrigin.Current);
bs.Seek(10, SeekOrigin.Begin);
bs.Seek(-20, SeekOrigin.End);
Console.ForegroundColor = ConsoleColor.DarkCyan;
Console.WriteLine("Hallo");
Console.ForegroundColor = ConsoleColor.Magenta;
Console.WriteLine("Magenta");
}
}
}
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// Allgemeine Informationen über eine Assembly werden über die folgenden
// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
// die einer Assembly zugeordnet sind.
[assembly: AssemblyTitle("10Enum")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("10Enum")]
[assembly: AssemblyCopyright("Copyright © 2018")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly
// für COM-Komponenten unsichtbar. Wenn Sie auf einen Typ in dieser Assembly von
// COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen.
[assembly: ComVisible(false)]
// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
[assembly: Guid("3169034f-9f35-43c3-b6b4-bf410e1e0efa")]
// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
//
// Hauptversion
// Nebenversion
// Buildnummer
// Revision
//
// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden,
// übernehmen, indem Sie "*" eingeben:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{FA5296A6-0BCF-4E79-98F2-5BEB7B6FD6AD}</ProjectGuid>
<OutputType>Exe</OutputType>
<RootNamespace>_10RefVsOut</RootNamespace>
<AssemblyName>10RefVsOut</AssemblyName>
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
</startup>
</configuration>
\ No newline at end of file
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _10RefVsOut
{
class Program
{
static void Plus1Ref(ref int x)
{
x = x + 1;
}
static void Plus1Out(out int x, out int y)
{
x = 11;
y = 22;
}
//static void LL2UTM(double lat, double lon, out double x, out double y)
// Beispiel für eine Funktion, die zwei Werte (Längen-/Breitengrad)
// in zwei neue Werte (x,y) umrechnet, also zwei Returnwerte haben
// muss.
static void Main(string[] args)
{
int m = 1;
int n; // Nicht initialisiert!
Plus1Ref(ref m);
//Plus1Ref(ref n); // Folge: n kann nicht für ref verwendet werden
// ref erwartet initialisierte Variable, erzwingt keine
// Zuweisung an die Variablen
//int k = n + m;
Plus1Out(out n, out m);
// Beide Parameter müssen nicht vor dem Aufruf initialisiert
// werden. Der Compiler stellt aber sicher, dass beiden
// Variablen in Plus1Out ein Wert zugewiesen wird.
int k = n + m;
}
}
}
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// Allgemeine Informationen über eine Assembly werden über die folgenden
// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
// die einer Assembly zugeordnet sind.
[assembly: AssemblyTitle("10RefVsOut")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("10RefVsOut")]
[assembly: AssemblyCopyright("Copyright © 2018")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly
// für COM-Komponenten unsichtbar. Wenn Sie auf einen Typ in dieser Assembly von
// COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen.
[assembly: ComVisible(false)]
// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
[assembly: Guid("fa5296a6-0bcf-4e79-98f2-5beb7b6fd6ad")]
// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
//
// Hauptversion
// Nebenversion
// Buildnummer
// Revision
//
// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden,
// übernehmen, indem Sie "*" eingeben:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{AAD9F324-97FA-4F53-A9F0-E6FC18E4A7C6}</ProjectGuid>
<OutputType>Exe</OutputType>
<RootNamespace>_10TextdateienIntro</RootNamespace>
<AssemblyName>10TextdateienIntro</AssemblyName>
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<Deterministic>true</Deterministic>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<None Include="App.config" />
</ItemGroup>
<ItemGroup>
<Content Include="Daten.txt" />
<Content Include="DatenOut.txt" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
</startup>
</configuration>
\ No newline at end of file
Hallo Welt
1
2
3
4
999
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97