Browse Source

idisposable

master
Serg Verevkin 1 year ago
parent
commit
f6e7b5cd89
  1. 64
      202409/ConsoleApp1/Animals/Animal.cs
  2. 14
      202409/ConsoleApp1/Animals/IMealContainer.cs
  3. 47
      202409/ConsoleApp1/Program.cs

64
202409/ConsoleApp1/Animals/Animal.cs

@ -1,5 +1,69 @@
namespace ConsoleApp1.Animals namespace ConsoleApp1.Animals
{ {
internal class MealReceiverAdapter : IMealReceiver
{
public IMealContainer MealContainer { get; }
public MealReceiverAdapter(IMealContainer mealContainer)
{
MealContainer = mealContainer;
}
public int PutAMeal(int iCount)
{
if (iCount == 0) return 0;
for(int i = 0; i < iCount; i++)
{
MealContainer.ReturnAMeal();
}
return 1;
}
}
internal class MealContainer : IMealContainer
{
private int MealCount = 10;
public int GetAMeal()
{
if (MealCount == 0) return 0;
MealCount--;
return 1;
}
public void ReturnAMeal()
{
MealCount++;
}
}
internal class MealConsumer : IDisposable
{
public IMealContainer Container { get; }
public int MealCount { get; private set; } = 0;
public MealConsumer(IMealContainer container)
{
Container = container;
}
public void ThreeHoursLater()
{
MealCount += Container.GetAMeal();
}
public void Dispose()
{
for(int ii =0; ii < MealCount; ii++)
{
Container.ReturnAMeal();
}
}
}
internal class Animal internal class Animal
{ {
#region internal classes #region internal classes

14
202409/ConsoleApp1/Animals/IMealContainer.cs

@ -0,0 +1,14 @@
namespace ConsoleApp1.Animals
{
internal interface IMealContainer
{
int GetAMeal();
void ReturnAMeal();
}
internal interface IMealReceiver
{
int PutAMeal(int iCount);
}
}

47
202409/ConsoleApp1/Program.cs

@ -9,6 +9,13 @@ namespace ConsoleApp1
{ {
static void Main(string[] args) static void Main(string[] args)
{ {
h_DisposableDemo();
using (var object_ = h_DisposablelessDemo())
{
//...
}
// h_PlayCards(); // h_PlayCards();
//Animal animal = new Animal(); //Animal animal = new Animal();
//Animal.MilkConsumerAreaInfo info = animal.GetAreaInfo(); //Animal.MilkConsumerAreaInfo info = animal.GetAreaInfo();
@ -25,6 +32,46 @@ namespace ConsoleApp1
Console.ReadKey(); Console.ReadKey();
} }
private static void h_DisposableDemo()
{
using (MealConsumer human = new MealConsumer(GetMealContainer1()))
{
//try
//{
human.ThreeHoursLater();
Thread.Sleep(3 * 60 * 60 * 1000 / 400000);
human.ThreeHoursLater();
Thread.Sleep(3 * 60 * 60 * 1000 / 400000);
human.ThreeHoursLater();
Thread.Sleep(3 * 60 * 60 * 1000 / 400000);
Console.WriteLine();
}
//}
//finally
//{
// human.Dispose();
//}
}
private static MealConsumer h_DisposablelessDemo()
{
MealConsumer human = new MealConsumer(GetMealContainer1());
human.ThreeHoursLater();
Thread.Sleep(3 * 60 * 60 * 1000 / 400000);
human.ThreeHoursLater();
Thread.Sleep(3 * 60 * 60 * 1000 / 400000);
human.ThreeHoursLater();
Thread.Sleep(3 * 60 * 60 * 1000 / 400000);
Console.WriteLine();
return human;
}
private static IMealContainer GetMealContainer1()
{
return new MealContainer();
}
private static void h_WriteXml(string sXmlFn) private static void h_WriteXml(string sXmlFn)
{ {
if (File.Exists(sXmlFn)) File.Delete(sXmlFn); if (File.Exists(sXmlFn)) File.Delete(sXmlFn);

Loading…
Cancel
Save