Great article on .NET Core versioning by Jon Skeet:
There is also extremely useful set of guidelines from Microsoft on what’s breaking change:
Skill to do come from doing…
Great article on .NET Core versioning by Jon Skeet:
There is also extremely useful set of guidelines from Microsoft on what’s breaking change:
This is a bunch of useful scripts for generating C# Entity Framework Code First POCOs from existing database schema.
First, let’s create T-SQL function for generating C# class for EF entity:
This function deliberately ignores certain columns, (Created On/By, Modified On/By). This properties are pushed to EntityBase class, which our POCO inherits from. All other columns in DB table will be mapped to corresponding C# type.
Next, let’s create T-SQL function for EF configuration (mapping class):
Now, let’s put it all together in one script:
All source code is available here
After spending some time on digging through unit testing components, I ran into a setup I am finally happy with. This consists of:
https://github.com/AutoFixture – acts as DI container/object factory, significantly improving unit test maintainability
https://github.com/moq – awesome mocking framework, fully integrated with AutoFixture
https://www.nuget.org/packages/SemanticComparison – excellent utility for comparing instances
https://github.com/shouldly/shouldly – great for simplifying assertion statements
https://github.com/xunit/xunit – superb unit testing framework, supporting parameterized tests, multiple test executions and much more
Although each utility is great on it’s own, when combined together, this stack significantly reduces amount of testing code.
Below I include sample config file with latest versions of all packages.
<?xml version="1.0" encoding="utf-8"?> <packages> <package id="AutoFixture" version="3.50.2" targetFramework="net461" /> <package id="AutoFixture.AutoMoq" version="3.50.2" targetFramework="net461" /> <package id="AutoFixture.Idioms" version="3.50.2" targetFramework="net461" /> <package id="AutoFixture.Xunit2" version="3.50.2" targetFramework="net461" /> <package id="Moq" version="4.1.1308.2120" targetFramework="net461" /> <package id="SemanticComparison" version="3.50.2" targetFramework="net461" /> <package id="Shouldly" version="2.8.2" targetFramework="net461" /> <package id="xunit" version="2.1.0" targetFramework="net461" /> <package id="xunit.abstractions" version="2.0.0" targetFramework="net461" /> <package id="xunit.assert" version="2.1.0" targetFramework="net461" /> <package id="xunit.core" version="2.1.0" targetFramework="net461" /> <package id="xunit.extensibility.core" version="2.1.0" targetFramework="net461" /> <package id="xunit.extensibility.execution" version="2.1.0" targetFramework="net461" /> <package id="xunit.runner.visualstudio" version="2.1.0" targetFramework="net461" /> </packages>
In this article I am presenting a way to create animated iPhone-style ImageButton control in Silverlight 4. Button will have icon on it, rounded corners and will zoom-in/zoom-out on hover. It will be done programmatically, with very minimum amount of XAML.
I start with creating ImageButton class. I use ButtonBase as base class:
I want my button to contain rounded rectangle with shadow and image on it. I add these items in constructor:
Now my control contains rectangle and image laid out over a grid to ensure proper items positioning. Next step is to add animation to enable zoom-in/out on hovering. This can be achieved with storyboards and double animations:
To start animations I need to start animations when mouse cursor enters or leaves control:
Very last step is making ImageSource property “bindable” so you can specify image from XAML. In order to do this I register new dependency property on my class:
The control then can be used in a following way:
And ready controls looks like this:
Great post by James Michael Hare I came across about using Sets in .Net. Definitely worth taking a look.
In this article I will try to briefly explain main differences between interface and abstract class concepts in .Net. Although the differences can appear to be very subtle and little important, badly design inheritance can lead to massive problems and great mess in the code.
Accordingly to MSDN abstract classes “are classes that cannot be instantiated (…), useful when creating components because they allow you specify an invariant level of functionality in some methods, but leave the implementation of other methods until a specific implementation of that class is needed. They also version well, because if additional functionality is needed in derived classes, it can be added to the base class without breaking code.”
Do declare abstract class following syntax is required:
abstract class Car() { public Car() { }; public string Make { get; set; } abstract public void Drive(); }
This class cannot be instantiated so following line will cause compiler throwing error:
Car a = new Car(); // this won’t compile
The only way to instantiate class Car is by creating child class that will inherit from it:
public class OffRoadCar : Car { public OffRoadCar(); public void Switch4WD(bool On) { // method code }; }
Because class OffRoadCar inherits from Car, following code will work:
OffRoadCar offroader = new OffRoadCar(); offroader.Switch4WD(true); // from OffRoadClass offroader.Drive(); // from Car class
Interface, after MSDN, is a “definition that can never change after the interface definition has been released. This interface invariance is an important principle of component design, because it protects existing systems that have been written to use the interface.”
Interface cannot be instantiated, but serve as sort of pattern for derived classes, that share and implement specific features. Derived classes can also extend interface functionality, by defining extra members. Following code demonstrates sample interface:
public interface ICar { string Make { get; set; } void Drive(); }
Because interface can serve as a “template” for series of classes, implementing it is a way of ensuring that all derived object will have set of common features. In example:
public class SportsCar : ICar { public string Make { get; set; } // required from ICar public bool IsConvertible { get; set; } // adds extra feature public void Drive() // required by ICar { }; } public class Van : ICar { public string Make { get; set; } // required from ICar public double LoadWeight { get; set; } // adds extra feature public void Drive() // required by ICar { }; }
Because both SportsCar and Van classes inherit from ICar interface, they are forced to have common set of features (Make property and Drive() method). Thanks to that it is possible to write:
List<ICar> vehicles = new { new SportsCar() { Make = "Ferrari", IsConvertible = false }, new Van() { Make = "Ford", LoadWeight = 3000 } }; foreach(ICar car in vehicles) { Console.WriteLine(car.Make); }
In opposite to abstract class, interface cannot implement any default functionality in its methods. It also cannot implement default constructor. This is why we say we implement interface and inherit from abstract class.
Class may implement an unlimited number of interfaces, but may inherit from only one abstract class. A class that is derived from an abstract class may still implement interfaces.
Abstract classes and interfaces play extremely important role in programming concept called polymorphism, which in essence is “ability for classes to provide different implementations of methods that are called by the same name” (MSDN).