using System;
namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
var exSample = new Sample { SomeProp = 5 };
var val = exSample.SomeProp;
exSample.ChangeSomeProp += ExSample_ChangeSomeProp;
exSample.DoWork();
}
private static void ExSample_ChangeSomeProp(object sender, ChangePropDelegateArgs args)
{
Console.WriteLine($"value from event: {args.Value}");
}
}
internal class ChangePropDelegateArgs
{
public int Value { get; private set; }
public ChangePropDelegateArgs(int val)
{
Value = val;
}
}
internal class Sample
{
private int _someProp = 0;
public event ChangePropDelegate ChangeSomeProp;
public int SomeProp
{
get
{
SomePropChange(_someProp, "read");
return _someProp;
}
set
{
_someProp = value;
SomePropChange(_someProp, "write");
}
}
private void SomePropChange(int val, string mode)
{
Console.WriteLine($"value: {val} mode: {mode}");
}
public void DoWork()
{
OnChangeSomeProp(new ChangePropDelegateArgs(_someProp));
}
protected virtual void OnChangeSomeProp(ChangePropDelegateArgs args)
{
ChangeSomeProp?.Invoke(this, args);
}
}
internal delegate void ChangePropDelegate(object sender, ChangePropDelegateArgs args);
}
using System;
namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
var exSample = new ExceptionSample();
try
{
exSample.MethodOne();
}
catch (Exception e)
{
Console.WriteLine($"something wrong, {e.Message}\nStack trace: {e.StackTrace}");
if (e.InnerException != null)
Console.WriteLine($"inner exception, {e.InnerException.Message}\nStack trace: {e.InnerException.StackTrace}");
}
}
}
class ExceptionSample
{
public void MethodOne()
{
try
{
MethodTwo();
}
catch (NotImplementedException e)
{
throw new Exception("MethodOne catch block",e);
}
}
private void MethodTwo()
{
throw new NotImplementedException();
}
}
}
https://docs.microsoft.com/en-us/dotnet/desktop/wi...