Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public interface IValidatable
- {
- bool IsValid { get; }
- void Validate();
- // (more validation-related methods here...)
- }
- public class Validatable<T> : IValidatable
- where T : class
- {
- public Validatable(T obj)
- {
- Object = obj;
- }
- public T Object { get; private set; }
- public bool IsValid { get; set; }
- public void Validate()
- {
- }
- public static implicit operator Validatable<T>(T other)
- {
- return new Validatable<T>(other);
- }
- public static explicit operator T(Validatable<T> other)
- {
- return other.Object;
- }
- }
- public static class Validatable
- {
- public static IValidatable AsValidatable<T>(T obj)
- where T: class
- {
- if (obj == null)
- return null;
- var already = obj as IValidatable;
- return already ?? new Validatable<T>(obj);
- }
- }
- public class Person // not IValidatable
- {
- public string FirstName { get; set; }
- public string LastName { get; set; }
- }
- public void ConversionTest()
- {
- var person = new Person { FirstName = "Bob", LastName = "Smith" };
- var validatable = Validatable.AsValidatable(person);
- var cast = (Person)validatable; // FAILS here with InvalidCastException
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement