Что такое автоматические свойства в C # и какова их цель?

Проверьте этот вопрос / ответ . Это более кратко, чем @Geoff, и также использует встроенную функцию fputcsv.

$result = $db_con->query('SELECT * FROM `some_table`');
if (!$result) die('Couldn\'t fetch records');
$num_fields = mysql_num_fields($result);
$headers = array();
for ($i = 0; $i < $num_fields; $i++) {
    $headers[] = mysql_field_name($result , $i);
}
$fp = fopen('php://output', 'w');
if ($fp && $result) {
    header('Content-Type: text/csv');
    header('Content-Disposition: attachment; filename="export.csv"');
    header('Pragma: no-cache');
    header('Expires: 0');
    fputcsv($fp, $headers);
    while ($row = $result->fetch_array(MYSQLI_NUM)) {
        fputcsv($fp, array_values($row));
    }
    die;
}

58
задан Cody Gray 14 May 2011 в 13:07
поделиться

1 ответ

Многие люди уже заявили, что автоматические свойства являются синтаксическим сахаром - краткий способ записать простые свойства. Я буду иметь дело с различиями между общедоступной переменной и общественной собственностью и почему при переключении между этими двумя необходимо было бы перекомпилировать. Возьмите следующее:

public class MyClass
{
    public int MyPublicVariable = 0;

    public int MyPublicProperty
    {
        get;
        set;
    }
}

Когда-то скомпилированный, концептуально , это на самом деле заканчивает тем, что было подобно следующему:

public class MyClass
{
    public int MyPublicVariable = 0;

    private int MyPublicProperty = 0;

    public int get_MyPublicProperty()
    {
        return MyPublicProperty;
    }

    public void set_MyPublicProperty( int value )
    {
        MyPublicProperty = value;
    }
}

Давным-давно, свойства были изобретены, чтобы быть быстрым и простым способом определить пар, добираются и методы установки. Это сделало код более читаемым и легче понять, когда они передали намерение и гарантировали непротиворечивость.

MyClass myClass = new MyClass();

myClass.MyPublicVariable = 2;

myClass.MyPublicProperty = 2;

Когда-то скомпилированный, снова концептуально , это заканчивает тем, что было подобно следующему:

MyClass myClass = new MyClass();

myClass.MyPublicVariable = 2;

myClass.set_MyPublicProperty( 2 );

Так, одна из причин предпочтения общественных собственностей по общедоступным переменным - то, если необходимо использовать другую логику, поскольку код развивается тогда, потребители кода должны не обязательно перекомпилировать. Поэтому это часто считают лучшей практикой. Это - также причина, которую автоматические свойства были изобретены - для ускорения вдоль кода, пишущего при поддержании этой лучшей практики.

также были некоторые комментарии об интерфейсах. Интерфейсы являются по существу контрактом, который гарантирует присутствие определенных методов в любом классе, реализовывая их. Как мы знаем от вышеупомянутого, свойства представляют один или два метода, таким образом, они работают просто великолепно в интерфейсах.

Hope это помогает немногому.

Вот другой пример, который может представлять интерес:

public class MyClass
{
    private int[] _myArray = new int[ 5 ];

    public int MyArray[ int index ]
    {
        get
        {
            return _myArray[ index ];
        }
        set
        {
            _myArray[ index ] = value;
        }
     }
}
public class MyClass
{
    private int[] _myArray = new int[ 5 ];

    public int get_MyArray( int index )
    {
        return _myArray[ index ];
    }

    public void set_MyArray( int index, int value )
    {
        _myArray[ index ] = value;
    }
}

отметьте: Я не могу точно помнить сигнатуры методов, используемые при декомпиляции свойств. Я думаю, что это - 'get_XXX' и 'set_XXX', но это могло быть что-то еще, что очень похоже. Пока понимание там, оно, вероятно, не имеет значения слишком много. В конце они все становятся адресами памяти так или иначе:-)

1
ответ дан 24 November 2019 в 18:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: