tên thành viên không được giống với loại kèm theo C #


81

Đoạn mã dưới đây bằng C # và tôi đang sử dụng Visual Studio 2010.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;

namespace FrontEnd
{
    class Flow
    {
        long i;
        private int x,y;
        public int X
        {
            get;set;
        }
        public int Y
        {
            get;set;
        }

        private void Flow()
        {
            X = x;
            Y = y;
        }

        public void NaturalNumbers(int x, int y)
        {
            for (i = 0; i < 9999; i++)
            {
                Console.WriteLine(i);
            }
            MessageBox.Show("done");
        }
    }
}

Khi tôi biên dịch mã trên, tôi gặp lỗi này:

Lỗi: 'Dòng chảy': tên thành viên không được giống với loại bao quanh của họ

Tại sao? Làm cách nào để giải quyết vấn đề này?

Câu trả lời:


127

Tên phương thức giống với tên lớp được gọi là hàm tạo . Các hàm tạo không có kiểu trả về. Vì vậy, chính xác là:

private Flow()
{
   X = x;
   Y = y;
}

Hoặc đổi tên hàm thành:

private void DoFlow()
{
   X = x;
   Y = y;
}

Mặc dù toàn bộ mã không có ý nghĩa gì đối với tôi.


2
Nhưng làm (các giá trị của) xvà yđến từ đâu?
— Henk Holterman

2
Lưu ý rằng lỗi này cũng có thể xảy ra nếu do nhầm lẫn tên lớp của bạn và tên xaml của bạn giống nhau. Đã xảy ra với tôi ngày hôm nay.
— NewBie1234

27

Vấn đề là với phương pháp:

private void Flow()
{
    X = x;
    Y = y;
}

Lớp của bạn được đặt tên Flownên phương thức này cũng không thể được đặt tên Flow. Bạn sẽ phải thay đổi tên của Flowphương thức thành một tên khác để làm cho mã này được biên dịch.

Hay ý của bạn là tạo một phương thức khởi tạo riêng để khởi tạo lớp của bạn? Nếu đúng như vậy, bạn sẽ phải xóa voidtừ khóa để cho trình biên dịch biết rằng bạn đang khai báo một hàm tạo.


6

Constructors không trả về một kiểu, chỉ cần loại bỏ kiểu trả về là vô hiệu trong trường hợp của bạn. Sau đó nó sẽ chạy tốt.


4

Vì Constructor nên ở đầu Class, bạn đang gặp phải vấn đề trên. Vì vậy, bạn có thể thay đổi tên hoặc nếu bạn muốn sử dụng nó như một hàm tạo, chỉ cần sao chép phương thức ở đầu lớp.


3

chỉ cần loại bỏ điều này vì hàm tạo không có kiểu trả về như void, nó sẽ như thế này:

private Flow()
    {
        X = x;
        Y = y;
    }  

2

Một phương thức khởi tạo không được có kiểu trả về. loại bỏ void trước mỗi hàm tạo.

Một số đặc tính cơ bản của một hàm tạo:

a. Cùng tên với lớp b. không có loại trả lại. c. sẽ được gọi mỗi khi một đối tượng được tạo với lớp. ví dụ- trong chương trình của bạn nếu bạn tạo hai đối tượng của Flow, Flow flow1 = new Flow (); Flow flow2 = new Flow (); thì phương thức khởi tạo Flow sẽ được gọi trong 2 lần.

d. Nếu bạn chỉ muốn gọi hàm tạo một lần thì hãy khai báo nó là static (hàm tạo tĩnh) và đừng quên xóa bất kỳ công cụ sửa đổi truy cập nào khỏi hàm tạo tĩnh ..

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookie và Chính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.