РЕДАКТИРОВАТЬ: поцарапать все ниже строки - в соответствии с комментариями, это, вероятно, не то, что вы хотите.
К сожалению, миксины не доступны как встроенная языковая функция в C #, за исключением некоторых сомнительных методов, включая инструменты для посткомпиляции, такие как PostSharp .Некоторые инструменты IoC могут также приводить к смешанным вещам (см. Лучшая реализация INotifyPropertyChange за все время ).
К точке @ 32bitkid вы можете написать методы расширения .Они не являются интерфейсами, но они позволяют применять реализацию поведения к типу вне этого типа.Например, вы можете написать:
public static class IPersonExtensions {
// Note use of this keyword
public static Int32 GetAge(this IPerson p) { return DateTime.Now - p.BirthDate; }
}
, а затем использовать его так:
var p = new Person( ... );
var pAge = p.GetAge();
Да, именно так обычно используются интерфейсы - хотя они получают файлы .cs, а не.h файлы.Вы можете определить интерфейс в его собственном файле, как класс, а затем объявить класс как реализующий интерфейс.
Например, в IFoo.cs:
public interface IFoo {
public String Bar { get; set; }
}
, а затемв ConcreteFoo.cs:
public class ConcreteFoo : IFoo {
// This property implements IFoo.Bar
public String Bar { get; set; }
}
(Кстати, это пример автоматически реализуемого свойства )
IFoo даже технически не требуетсяв своем собственном файле - это может быть в любом файле .cs.По соглашению, это обычно по-своему.Также обратите внимание на соглашение об использовании префикса I для интерфейсов.
Возможно, вы захотите узнать больше об этом, например, здесь: http://www.csharp -station.com / Tutorials / Lesson13.aspx