import { Dictionary } from '#common/dictionary';
import { Initializer } from '#common/initializer';
import { Abstract, Access, Extern, New, Override, Sealed, Static, Virtual } from '#csharp/code-dom/access-modifier';
import { Attribute } from '#csharp/code-dom/attribute';
import { Expression, ExpressionOrLiteral } from '#csharp/code-dom/expression';
import { OneOrMoreStatements, Statement } from '#csharp/code-dom/statements/statement';
import { ExpressionStatement, Instance, Variable } from '#csharp/code-dom/variable';
import { TypeDeclaration } from './type-declaration';
export declare class Property extends Initializer implements Variable, Instance {
    name: string;
    type: TypeDeclaration;
    'new': New;
    getAccess: Access;
    setAccess: Access;
    'static': Static;
    virtual: Virtual;
    sealed: Sealed;
    override: Override;
    abstract: Abstract;
    extern: Extern;
    attributes: Attribute[];
    metadata: Dictionary<any>;
    description: string;
    externalDocs?: {
        url?: string;
        description?: string;
    };
    protected readonly visibility: Access;
    add<T extends object>(item: T & (Attribute)): T;
    protected readonly attributeDeclaration: string;
    constructor(name: string, type: TypeDeclaration, objectInitializer?: Partial<Property>);
    protected readonly getterDeclaration: string;
    protected readonly setterDeclaration: string;
    protected readonly getter: string;
    protected readonly setter: string;
    readonly declaration: string;
    readonly value: string;
    readonly valuePrivate: string;
    toString(): string;
    assign(expression: ExpressionOrLiteral): OneOrMoreStatements;
    assignPrivate(expression: ExpressionOrLiteral): OneOrMoreStatements;
    readonly declarationExpression: Expression;
    readonly declarationStatement: Statement;
    invokeMethod(methodName: string, ...parameters: Array<Expression>): ExpressionStatement;
}
export declare class ImplementedProperty extends Property {
    name: string;
    type: TypeDeclaration;
    getterStatements?: Statement;
    setterStatements?: Statement;
    constructor(name: string, type: TypeDeclaration, objectInitializer?: Partial<ImplementedProperty>);
    readonly declaration: string;
    protected readonly getter: string;
    protected readonly setter: string;
}
export declare class LambdaProperty extends Property {
    name: string;
    type: TypeDeclaration;
    expression: Expression;
    constructor(name: string, type: TypeDeclaration, expression: Expression, objectInitializer?: Partial<LambdaProperty>);
    readonly declaration: string;
}
export declare class LazyProperty extends Property {
    name: string;
    type: TypeDeclaration;
    expression: Expression;
    private backingName;
    instanceAccess: string;
    constructor(name: string, type: TypeDeclaration, expression: Expression, objectInitializer?: Partial<LazyProperty>);
    readonly declaration: string;
}
export declare class BackedProperty extends ImplementedProperty {
    backingName: string;
    initializer?: ExpressionOrLiteral;
    constructor(name: string, type: TypeDeclaration, objectInitializer?: Partial<BackedProperty>);
    readonly declaration: string;
    readonly value: string;
    readonly valuePrivate: string;
    assignPrivate(expression: ExpressionOrLiteral): OneOrMoreStatements;
}
//# sourceMappingURL=property.d.ts.map