Not unless you own the base-type (and rightly so - constructors make sure the object is consistent, and if you don't own the base-type, you won't know how to instantiate it's private variables so it's consistent).
class MyGenericType<T> {
private T myvar;
internal void initiantiate(T val){
myvar = val;
}
// allow inheriting types to avoid the constructor MyGenericType(T val)
protected MyGenericType() {}
public MyGenericType(T val){
myvar = val;
}
}
class MyInheritingType : MyGenericType<int> {
// this constructor uses the public constructor
public MyInheritingType(int init) : base(init) { }
// this uses the protected constructor of the base object.
public MyInheritingType() : base() {
base.instantiate(-1);
}
}
class MyProgram {
static void Main(){
var a = new MyGenericType<int> ( 100 ) // valid
var b = new MyGenericType<int> () // invalid
var c = new MyInheritingType() // valid.
}
}