MathOperationsWithGeneric
Changes
.gitignore 9(+9 -0)
ExpressionOperatorProxy/ExpressionOperatorProxy/Generic/MathOperatorProxy/OperatorProxy.cs 75(+75 -0)
Details
.gitignore 9(+9 -0)
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..df0ae75
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,9 @@
+
+ExpressionOperatorProxy/.vs/
+
+
+ExpressionOperatorProxy/ExpressionOperatorProxy/bin/
+ExpressionOperatorProxy/ExpressionOperatorProxy/obj/
+
+ExpressionOperatorProxy/ConsoleTest/bin/
+ExpressionOperatorProxy/ConsoleTest/obj/
diff --git a/ExpressionOperatorProxy/ConsoleTest/ConsoleTest.csproj b/ExpressionOperatorProxy/ConsoleTest/ConsoleTest.csproj
new file mode 100644
index 0000000..6ca0e44
--- /dev/null
+++ b/ExpressionOperatorProxy/ConsoleTest/ConsoleTest.csproj
@@ -0,0 +1,54 @@
+<?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>{79584C30-FC63-42C6-9D30-745B51C02AA2}</ProjectGuid>
+ <OutputType>Exe</OutputType>
+ <RootNamespace>ConsoleTest</RootNamespace>
+ <AssemblyName>ConsoleTest</AssemblyName>
+ <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ <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.Xml" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="Program.cs" />
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\ExpressionOperatorProxy\ExpressionOperatorProxy.csproj">
+ <Project>{b9cca952-9128-4ce5-a0e2-f977ff567d34}</Project>
+ <Name>ExpressionOperatorProxy</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+</Project>
\ No newline at end of file
diff --git a/ExpressionOperatorProxy/ConsoleTest/Program.cs b/ExpressionOperatorProxy/ConsoleTest/Program.cs
new file mode 100644
index 0000000..1341193
--- /dev/null
+++ b/ExpressionOperatorProxy/ConsoleTest/Program.cs
@@ -0,0 +1,62 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+using ExpressionOperatorProxy.Generic.MathOperatorProxy;
+using ExpressionOperatorProxy.Generic.Collection;
+
+namespace ConsoleTest
+{
+ class Program
+ {
+
+ //OperatorProxy example
+ static void Test1()
+ {
+ var a = new OperatorProxy<int>(10);
+ var b = new OperatorProxy<int>(20);
+ var c = 2;
+
+ var res = a + b * c;
+ Console.WriteLine(res);
+ }
+
+ //Matrix example
+ static void Test2()
+ {
+ var m1 = new Matrix<int>(new List<List<int>>()
+ {
+ new List<int>(){ 1, 2, 3 },
+ new List<int>(){ 3, 2, 1 }
+ });
+
+ var m2 = new Matrix<int>(new List<List<int>>()
+ {
+ new List<int>(){ -1, -2, -3 },
+ new List<int>(){ 3, 2, 1 }
+ });
+
+ var res = m1 + m2;
+ Console.WriteLine(res);
+ }
+
+ class TestClass { }
+ //Error example
+ //TestClass not implement + operator
+ static void Test3()
+ {
+ var a = new OperatorProxy<TestClass>(new TestClass());
+ var b = new OperatorProxy<TestClass>(new TestClass());
+
+ var res = a + b;
+ }
+
+ static void Main(string[] args)
+ {
+ Test1();
+ Test2();
+ //Test3();
+ }
+ }
+}
diff --git a/ExpressionOperatorProxy/ConsoleTest/Properties/AssemblyInfo.cs b/ExpressionOperatorProxy/ConsoleTest/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..00f257b
--- /dev/null
+++ b/ExpressionOperatorProxy/ConsoleTest/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// Общие сведения об этой сборке предоставляются следующим набором
+// набора атрибутов. Измените значения этих атрибутов, чтобы изменить сведения,
+// связанные со сборкой.
+[assembly: AssemblyTitle("ConsoleTest")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("ConsoleTest")]
+[assembly: AssemblyCopyright("Copyright © 2019")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Установка значения False для параметра ComVisible делает типы в этой сборке невидимыми
+// для компонентов COM. Если необходимо обратиться к типу в этой сборке через
+// COM, задайте атрибуту ComVisible значение TRUE для этого типа.
+[assembly: ComVisible(false)]
+
+// Следующий GUID служит для идентификации библиотеки типов, если этот проект будет видимым для COM
+[assembly: Guid("79584c30-fc63-42c6-9d30-745b51c02aa2")]
+
+// Сведения о версии сборки состоят из следующих четырех значений:
+//
+// Основной номер версии
+// Дополнительный номер версии
+// Номер сборки
+// Редакция
+//
+// Можно задать все значения или принять номер сборки и номер редакции по умолчанию.
+// используя "*", как показано ниже:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/ExpressionOperatorProxy/ExpressionOperatorProxy.sln b/ExpressionOperatorProxy/ExpressionOperatorProxy.sln
new file mode 100644
index 0000000..aadaecf
--- /dev/null
+++ b/ExpressionOperatorProxy/ExpressionOperatorProxy.sln
@@ -0,0 +1,31 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 15
+VisualStudioVersion = 15.0.28307.136
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ExpressionOperatorProxy", "ExpressionOperatorProxy\ExpressionOperatorProxy.csproj", "{B9CCA952-9128-4CE5-A0E2-F977FF567D34}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ConsoleTest", "ConsoleTest\ConsoleTest.csproj", "{79584C30-FC63-42C6-9D30-745B51C02AA2}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {B9CCA952-9128-4CE5-A0E2-F977FF567D34}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {B9CCA952-9128-4CE5-A0E2-F977FF567D34}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {B9CCA952-9128-4CE5-A0E2-F977FF567D34}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {B9CCA952-9128-4CE5-A0E2-F977FF567D34}.Release|Any CPU.Build.0 = Release|Any CPU
+ {79584C30-FC63-42C6-9D30-745B51C02AA2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {79584C30-FC63-42C6-9D30-745B51C02AA2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {79584C30-FC63-42C6-9D30-745B51C02AA2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {79584C30-FC63-42C6-9D30-745B51C02AA2}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {9B89A0E2-77F3-464F-859C-2BB9631A1B7D}
+ EndGlobalSection
+EndGlobal
diff --git a/ExpressionOperatorProxy/ExpressionOperatorProxy/ExpressionOperatorProxy.csproj b/ExpressionOperatorProxy/ExpressionOperatorProxy/ExpressionOperatorProxy.csproj
new file mode 100644
index 0000000..bed2421
--- /dev/null
+++ b/ExpressionOperatorProxy/ExpressionOperatorProxy/ExpressionOperatorProxy.csproj
@@ -0,0 +1,49 @@
+<?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>{B9CCA952-9128-4CE5-A0E2-F977FF567D34}</ProjectGuid>
+ <OutputType>Library</OutputType>
+ <AppDesignerFolder>Properties</AppDesignerFolder>
+ <RootNamespace>ExpressionOperatorProxy</RootNamespace>
+ <AssemblyName>ExpressionOperatorProxy</AssemblyName>
+ <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
+ <FileAlignment>512</FileAlignment>
+ <Deterministic>true</Deterministic>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <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' ">
+ <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.Xml" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="Generic\Collection\Matrix.cs" />
+ <Compile Include="Generic\MathOperatorProxy\OperatorProxy.cs" />
+ <Compile Include="Generic\MathOperatorProxy\StaticOperatorProxy.cs" />
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ </ItemGroup>
+ <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+</Project>
\ No newline at end of file
diff --git a/ExpressionOperatorProxy/ExpressionOperatorProxy/ExpressionOperatorProxy.csproj.user b/ExpressionOperatorProxy/ExpressionOperatorProxy/ExpressionOperatorProxy.csproj.user
new file mode 100644
index 0000000..6cbe588
--- /dev/null
+++ b/ExpressionOperatorProxy/ExpressionOperatorProxy/ExpressionOperatorProxy.csproj.user
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <ProjectView>ProjectFiles</ProjectView>
+ </PropertyGroup>
+</Project>
\ No newline at end of file
diff --git a/ExpressionOperatorProxy/ExpressionOperatorProxy/Generic/Collection/Matrix.cs b/ExpressionOperatorProxy/ExpressionOperatorProxy/Generic/Collection/Matrix.cs
new file mode 100644
index 0000000..02d8eef
--- /dev/null
+++ b/ExpressionOperatorProxy/ExpressionOperatorProxy/Generic/Collection/Matrix.cs
@@ -0,0 +1,91 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+using ExpressionOperatorProxy.Generic.MathOperatorProxy;
+
+namespace ExpressionOperatorProxy.Generic.Collection
+{
+ //Универсальная матрица
+ public class Matrix<T>
+ {
+ OperatorProxy<T>[][] _matrix;
+
+ public int Height => _matrix.Length;
+ public int Weight => Height != 0
+ ? _matrix.First().Length
+ : 0;
+
+
+ public Matrix(int Height, int weight)
+ {
+ _matrix = new OperatorProxy<T>[Height][];
+
+ foreach (var i in Enumerable.Range(0, Height))
+ _matrix[i] = new OperatorProxy<T>[weight];
+ }
+ public Matrix(IEnumerable<IEnumerable<T>> data)
+ {
+ _matrix = data
+ .Select(e =>
+ e.Select(e2 =>
+ new OperatorProxy<T>(e2))
+ .ToArray())
+ .ToArray();
+ }
+
+
+ public T this[int H, int W]
+ {
+ set => _matrix[H][W].Value = value;
+ get => _matrix[H][W].Value;
+ }
+
+ public static Matrix<T> operator +(Matrix<T> operator1, Matrix<T> operator2)
+ {
+ if (operator1.Height != operator2.Height
+ || operator1.Weight != operator2.Weight)
+ throw new Exception();
+
+ Matrix<T> res = new Matrix<T>(operator2.Height, operator2.Weight);
+
+ for (int i = 0; i < operator1.Height; i++)
+ for (int j = 0; j < operator1.Weight; j++)
+ res._matrix[i][j] = operator1._matrix[i][j] + operator2._matrix[i][j];
+
+ return res;
+ }
+ public static Matrix<T> operator -(Matrix<T> operator1, Matrix<T> operator2)
+ {
+ if (operator1.Height != operator2.Height
+ || operator1.Weight != operator2.Weight)
+ throw new Exception();
+
+ Matrix<T> res = new Matrix<T>(operator2.Height, operator2.Weight);
+
+ for (int i = 0; i < operator1.Height; i++)
+ for (int j = 0; j < operator2.Weight; j++)
+ res._matrix[i][j] = operator1._matrix[i][j] - operator2._matrix[i][j];
+
+ return res;
+ }
+
+
+ public override string ToString()
+ {
+ StringBuilder res = new StringBuilder();
+
+ foreach (var row in _matrix)
+ {
+ foreach (var elem in row)
+ res.Append(elem + " ");
+ res.Append('\n');
+ }
+
+ return res.ToString();
+ }
+
+ }
+}
diff --git a/ExpressionOperatorProxy/ExpressionOperatorProxy/Generic/MathOperatorProxy/OperatorProxy.cs b/ExpressionOperatorProxy/ExpressionOperatorProxy/Generic/MathOperatorProxy/OperatorProxy.cs
new file mode 100644
index 0000000..950313f
--- /dev/null
+++ b/ExpressionOperatorProxy/ExpressionOperatorProxy/Generic/MathOperatorProxy/OperatorProxy.cs
@@ -0,0 +1,75 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace ExpressionOperatorProxy.Generic.MathOperatorProxy
+{
+
+ //Обертка над StaticOperatorProxy для удобства использования
+ public struct OperatorProxy<T>
+ {
+ public T Value { set; get; }
+
+
+ public OperatorProxy(T value)
+ {
+ this.Value = value;
+ }
+
+
+ public static OperatorProxy<T> operator +(OperatorProxy<T> c1, T c2)
+ {
+ return new OperatorProxy<T>(StaticOperatorProxy<T>.Add(c1.Value, c2));
+ }
+ public static OperatorProxy<T> operator +(OperatorProxy<T> c1, OperatorProxy<T> c2)
+ {
+ return new OperatorProxy<T>(StaticOperatorProxy<T>.Add(c1.Value, c2.Value));
+ }
+
+ public static OperatorProxy<T> operator -(OperatorProxy<T> c1, T c2)
+ {
+ return new OperatorProxy<T>(StaticOperatorProxy<T>.Subtract(c1.Value, c2));
+ }
+ public static OperatorProxy<T> operator -(OperatorProxy<T> c1, OperatorProxy<T> c2)
+ {
+ return new OperatorProxy<T>(StaticOperatorProxy<T>.Subtract(c1.Value, c2.Value));
+ }
+
+ public static OperatorProxy<T> operator *(OperatorProxy<T> c1, T c2)
+ {
+ return new OperatorProxy<T>(StaticOperatorProxy<T>.Multiply(c1.Value, c2));
+ }
+ public static OperatorProxy<T> operator *(OperatorProxy<T> c1, OperatorProxy<T> c2)
+ {
+ return new OperatorProxy<T>(StaticOperatorProxy<T>.Multiply(c1.Value, c2.Value));
+ }
+
+ public static OperatorProxy<T> operator /(OperatorProxy<T> c1, T c2)
+ {
+ return new OperatorProxy<T>(StaticOperatorProxy<T>.Divide(c1.Value, c2));
+ }
+ public static OperatorProxy<T> operator /(OperatorProxy<T> c1, OperatorProxy<T> c2)
+ {
+ return new OperatorProxy<T>(StaticOperatorProxy<T>.Divide(c1.Value, c2.Value));
+ }
+
+
+ public override string ToString()
+ {
+ return Value.ToString();
+ }
+
+ public override int GetHashCode()
+ {
+ return Value.GetHashCode();
+ }
+
+ public override bool Equals(object obj)
+ {
+ return Value.Equals(obj);
+ }
+
+ }
+}
diff --git a/ExpressionOperatorProxy/ExpressionOperatorProxy/Generic/MathOperatorProxy/StaticOperatorProxy.cs b/ExpressionOperatorProxy/ExpressionOperatorProxy/Generic/MathOperatorProxy/StaticOperatorProxy.cs
new file mode 100644
index 0000000..81dba83
--- /dev/null
+++ b/ExpressionOperatorProxy/ExpressionOperatorProxy/Generic/MathOperatorProxy/StaticOperatorProxy.cs
@@ -0,0 +1,78 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+using System.Linq.Expressions;
+
+namespace ExpressionOperatorProxy.Generic.MathOperatorProxy
+{
+
+ /// <summary>
+ /// Пример реализации взят с
+ /// http://www.cyberforum.ru/csharp-net/thread1994108.html
+ ///
+ /// Позволяет производить арифметические операции над Generic T типом
+ /// Возможны ошибки, если используемый тип не реализует используемую операцию
+ /// Список операций можно расширить на основе возможностей класса Expression
+ /// </summary>
+ /// <typeparam name="T"></typeparam>
+ public static class StaticOperatorProxy<T>
+ {
+ private readonly static Func<T, T, T> _addOperator;
+ private readonly static Func<T, T, T> _subtractOperator;
+ private readonly static Func<T, T, T> _multiplyOperator;
+ private readonly static Func<T, T, T> _divideOperator;
+
+ private static Func<T, T, T> CreateDelegate(BinaryExpression expression, ParameterExpression parameter1, ParameterExpression parameter2)
+ {
+ return Expression
+ .Lambda<Func<T, T, T>>(
+ expression,
+ new[]
+ {
+ parameter1,
+ parameter2
+ }
+ ).Compile();
+ }
+
+ static StaticOperatorProxy()
+ {
+
+ var operand1 = Expression.Parameter(typeof(T), "o1");
+ var operand2 = Expression.Parameter(typeof(T), "o2");
+
+ var addCall = Expression.Add(operand1, operand2);
+ var subtractCall = Expression.Subtract(operand1, operand2);
+ var multiplyCall = Expression.Multiply(operand1, operand2);
+ var dividetractCall = Expression.Divide(operand1, operand2);
+
+ _addOperator = CreateDelegate(addCall, operand1, operand2);
+ _subtractOperator = CreateDelegate(subtractCall, operand1, operand2);
+ _multiplyOperator = CreateDelegate(multiplyCall, operand1, operand2);
+ _divideOperator = CreateDelegate(dividetractCall, operand1, operand2);
+ }
+
+
+ public static T Add(T operand1, T operand2)
+ {
+ return _addOperator(operand1, operand2);
+ }
+ public static T Subtract(T operand1, T operand2)
+ {
+ return _subtractOperator(operand1, operand2);
+ }
+ public static T Multiply(T operand1, T operand2)
+ {
+ return _multiplyOperator(operand1, operand2);
+ }
+ public static T Divide(T operand1, T operand2)
+ {
+ return _divideOperator(operand1, operand2);
+ }
+
+ }
+}
+
diff --git a/ExpressionOperatorProxy/ExpressionOperatorProxy/Properties/AssemblyInfo.cs b/ExpressionOperatorProxy/ExpressionOperatorProxy/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..005a5f1
--- /dev/null
+++ b/ExpressionOperatorProxy/ExpressionOperatorProxy/Properties/AssemblyInfo.cs
@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// Общие сведения об этой сборке предоставляются следующим набором
+// набора атрибутов. Измените значения этих атрибутов, чтобы изменить сведения,
+// связанные со сборкой.
+[assembly: AssemblyTitle("ExpressionOperatorProxy")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("ExpressionOperatorProxy")]
+[assembly: AssemblyCopyright("Copyright © 2019")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Установка значения False для параметра ComVisible делает типы в этой сборке невидимыми
+// для компонентов COM. Если необходимо обратиться к типу в этой сборке через
+// COM, задайте атрибуту ComVisible значение TRUE для этого типа.
+[assembly: ComVisible(false)]
+
+// Следующий GUID служит для идентификации библиотеки типов, если этот проект будет видимым для COM
+[assembly: Guid("b9cca952-9128-4ce5-a0e2-f977ff567d34")]
+
+// Сведения о версии сборки состоят из следующих четырех значений:
+//
+// Основной номер версии
+// Дополнительный номер версии
+// Номер сборки
+// Редакция
+//
+// Можно задать все значения или принять номер сборки и номер редакции по умолчанию.
+// используя "*", как показано ниже:
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]